使用变量写入文件的某个行号

时间:2016-06-27 22:05:09

标签: linux bash shell

在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不接受变量。 我该如何解决?还有其他办法吗?

2 个答案:

答案 0 :(得分:1)

在指出duplication之前的一些提示:

  • 变量不会在single quotes内展开。
  • 不会自动检测变量名称边界。 $resianything不会扩展为变量res后跟字符串ianything的值,而是扩展为名称为resianything的变量的值,该变量可能为空。您可以通过在脚本顶部添加set -o nounset(理想情况下为-o errexit)来检测此类错误。
  • 您肯定希望escape将您插入sed命令的字符串{。}}。

答案 1 :(得分:1)

您似乎在问为什么$res没有扩展。这不是sed问题;这是贝壳。通常是bash& c。不要在单引号内扩展变量。尝试双引号。

此外,将变量与以下字母数字文本分开的一种方法是使用花括号。例如,请尝试${res}anything而不是$resanything