如何在sed命令中使用变量

Joh*_*ohn 5 sed shell-script quoting

我正在努力奔跑

sed -i "/$variable/c \$variable1' file.txt
Run Code Online (Sandbox Code Playgroud)

但它没有在文件中显示任何更改:file.txt.

但是相同的命令,没有变量可以正常工作:

sed -i "/variable/c \variable1' file.txt
Run Code Online (Sandbox Code Playgroud)

Gra*_*eme 5

像这样做:

sed -i "/$variable/c \\${variable}1" file.txt
Run Code Online (Sandbox Code Playgroud)

变化:

  1. 如果在 a\之前有 a $,它会使 shell$在字符串中插入一个文字。而是放一个额外的\来转义第一个,这样 at\将被打印出来。

  2. 如果您的变量后面紧跟字母或数字,请将名称括起来,{...}这样可以将您的变量与不存在的变量区分开来variable1(如果变量不存在,shell 会将其扩展为空,而不是寻找较短的名称)。

  3. 与您的报价保持一致,您以 开始",所以不要以'! 无论如何,变量只能在双引号内展开。

请注意,为了调试此类事情,您可以使用echo,查看输出,下面的命令将显示出了什么问题:

echo sed -i "/$variable/c \$variable1" file.txt
Run Code Online (Sandbox Code Playgroud)

比较一下;

echo sed -i "/$variable/c \\${variable}1" file.txt
Run Code Online (Sandbox Code Playgroud)