在shell脚本中,我在文件中获得一定数量的行,并使用以下代码将其存储在变量中:
res=$(grep -n '123' somefile.txt | sed 's/^\([0-9]\+\):.*$/\1/')
现在我想在这一行之后写3行,所以我使用了这些代码:
sed -i '$res\anything' somefile.txt
sed -i '$resianything' somefile.txt
但它们不起作用。似乎sed
不接受变量。
我该如何解决?还有其他办法吗?
答案 0 :(得分:1)
在指出duplication之前的一些提示:
$resianything
不会扩展为变量res
后跟字符串ianything
的值,而是扩展为名称为resianything
的变量的值,该变量可能为空。您可以通过在脚本顶部添加set -o nounset
(理想情况下为-o errexit
)来检测此类错误。sed
命令的字符串{。}}。答案 1 :(得分:1)
您似乎在问为什么$res
没有扩展。这不是sed
问题;这是贝壳。通常是bash& c。不要在单引号内扩展变量。尝试双引号。
此外,将变量与以下字母数字文本分开的一种方法是使用花括号。例如,请尝试${res}anything
而不是$resanything
。