如何在 sed 中使用单引号和双引号变量

Cas*_*per 4 linux sed

我有这个命令,它创建一行的副本并更改一些子字符串:

之前测试文件内容:

;push "route 192.168.20.0 255.255.255.0"
Run Code Online (Sandbox Code Playgroud)

工作命令:

sed -i -e '/;push "route 192.168.20.0 255.255.255.0"/ a push "route
172.31.0.0 255.255.0.0"' test
Run Code Online (Sandbox Code Playgroud)

之后测试文件内容:

;push "route 192.168.20.0 255.255.255.0" 
push "route 172.31.0.0 255.255.0.0"
Run Code Online (Sandbox Code Playgroud)

现在,如果我有一个var=172.31.0.0,当我这样写时,如何在这种情况下使用它:

sed -i -e '/;push "route 192.168.20.0 255.255.255.0"/ a push "route $var 255.255.0.0"' test
Run Code Online (Sandbox Code Playgroud)

我懂了:

;push "route 192.168.20.0 255.255.255.0" 
push "route $var 255.255.0.0"
Run Code Online (Sandbox Code Playgroud)

我知道单引号使其中的所有内容都是文字字符串,现在我如何在这里使用变量?任何帮助表示赞赏。

iam*_*ser 6

几个不同的选择。

逃脱""字符串周围的情况。

 \"route 192.68.20.0. 255.255.0\"
Run Code Online (Sandbox Code Playgroud)

例子,

$ var="172.31.0.0"
$ echo ';push "route 192.168.20.0 255.255.255.0"' \
  | sed -e "/;push \"route 192.168.20.0 255.255.255.0\"/ a push \"route $var 255.255.0.0\""

;push "route 192.168.20.0 255.255.255.0"
push "route 172.31.0.0 255.255.0.0"
Run Code Online (Sandbox Code Playgroud)

或者

当在带有双引号的$var字符串中定义它们时,请使用单引号。

$ echo ';push "route 192.168.20.0 255.255.255.0"' \
  | sed -e '/;push "route 192.168.20.0 255.255.255.0"/ a push "route '$var' 255.255.0.0"'

;push "route 192.168.20.0 255.255.255.0"
push "route 172.31.0.0 255.255.0.0"
Run Code Online (Sandbox Code Playgroud)