我有这个命令,它创建一行的副本并更改一些子字符串:
之前测试文件内容:
;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)
我知道单引号使其中的所有内容都是文字字符串,现在我如何在这里使用变量?任何帮助表示赞赏。
几个不同的选择。
逃脱""字符串周围的情况。
\"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)