sed 在正则表达式中给出未终止替换的错误

San*_*ole 4 shell awk sed

我试图在文件中替换字符串“xxxx”并将结果输出到另一个文件。它在正则表达式中给我错误未终止的替代

这是代码

sed 's/x.x.x.x/'$bigip_management_ip'/g' temp.tt >> variables.tf
sed: 1: "s/x.x.x.x/": unterminated substitute in regular expression
Run Code Online (Sandbox Code Playgroud)

回声 $bigip_management_ip

54.83.174.153
Run Code Online (Sandbox Code Playgroud)

shitole$ cat temp.tt

variable "bigip_management_ip" {
  default = "x.x.x.x"
}
Run Code Online (Sandbox Code Playgroud)

Abh*_*tta 6

只需像下面这样改变你的命令,它对我有用。

sed 's|'x.x.x.x'|'"$bigip_management_ip"'|g' temp.tt >> variables.tf
Run Code Online (Sandbox Code Playgroud)


tha*_*guy 6

这是针对您的问题的 MCVE:

bigip_management_ip=" 54.83.174.153"
sed 's/x.x.x.x/'$bigip_management_ip'/g'
Run Code Online (Sandbox Code Playgroud)

在 macOS 上执行时,您会得到:

sed: 1: "s/x.x.x.x/": unterminated substitute in regular expression
Run Code Online (Sandbox Code Playgroud)

问题是变量中的前导空格由于缺少引用而导致分词。ShellCheck 对此发出警告:

In /Users/myuser/myscript line 2:
    sed 's/x.x.x.x/'$bigip_management_ip'/g'
                    ^-- SC2086: Double quote to prevent globbing and word splitting.
Run Code Online (Sandbox Code Playgroud)

你应该总是引用你的变量,除非你确定你不能:

sed "s/x.x.x.x/$bigip_management_ip/g"
Run Code Online (Sandbox Code Playgroud)