在带有多行变量的 shell 脚本中使用 sed

tyl*_*ero 5 sed shell-script variable

我使用 shell 脚本来设置不同类型的虚拟机。这些脚本通常包含多行变量,需要使用sed.

如果我像这样创建它们,一切都很好:

VAR="Config Line1\nConfig Line2\nConfig Line 3"
sed -i "/MatchingPattern/ a $VAR" somefile
Run Code Online (Sandbox Code Playgroud)

但这并不会使脚本变得非常可读,特别是因为文本块可能很长。

如果我这样写:

VAR="Config Line1
Config Line2
Config Line 3"
sed -i "/MatchingPattern/ a $VAR" somefile
Run Code Online (Sandbox Code Playgroud)

运行脚本时出现错误:sed: -e expression #1, char 31: unknown command:C'`

有没有办法使用sed这样声明的变量?

Kus*_*nda 0

该错误是由于sed附加命令a在实际的后面需要一个反斜杠a

使用 GNU sed

$ sed "/pattern/a\\$VAR" file.in >file.out
Run Code Online (Sandbox Code Playgroud)

sed据我所知,BSD只能使用该a命令将一行插入到文件中,除非换行符被正确转义。

关于如何使用 BSD 解决此问题的密切相关答案sedhttp://unix.stackexchange.com/a/60322