sed变量扩展问题

sed变量扩展问题

因此,我在正在编写的 bash 脚本上取得了一些进展,但似乎无法弄清楚如何编写以下内容以扩展变量。我尝试了正常的 ${variable} 和 \$(variable) 以及其他一些随机的无奈尝试。

我什至尝试使用 eval 将其包装在“”中,但它仍然不起作用(除非从命令行运行但在 bash 脚本中不起作用)。

sed -i 's/.*output_snat_lo.conf:/    - '\''\\-t nat -A POSTROUTING -s 10.0.0.1/32 -d $DNAT -j SNAT --to-source $SINT'\''\n&/' file.yaml

有什么建议么? TIA。

答案1

$DNAT将单引号内部更改'"$DNAT"'为终止单引号,启动双引号(因为您几乎总是希望在双引号内进行变量扩展以停止分词),放入变量,终止双引号并重新启动单引号。

sed -i 's|.*output_snat_lo.conf:|    - '\''\\-t nat -A POSTROUTING -s 10.0.0.1/32 -d '"$DNAT"' -j SNAT --to-source '"$SINT"\''\n&|' file.yaml

答案2

如果字符串扩展包含路径分隔符(即/),则必须使用另一个字符(不在模式中)。

另请注意,使用 $variables 时,请使用双引号,例如:

sed -i 's/old_string/new_string/' $some_file

变成

sed -i "s|$old_string|$new_string|" $some_file

相关内容