如何使用 sed 将文件中的路径替换为新路径?

如何使用 sed 将文件中的路径替换为新路径?

我正在使用 sed 将文件中的路径替换为新路径。这里缺少或不存在什么?

# sed -i `s|/$SPLUNK_HOME/bin/splunk|/opt/splunk/bin/splunk|g' filename

>同意了。

答案1

您使用反引号 ( `) 打开一个永远不会终止的子 shell 语句。确保您的报价相符。

提示符>是 shell 告诉您它正在为未终止的引号寻求更多输入,方法是向您显示 中定义的辅助提示符PS2

您想在脚本中使用参数扩展,因此弱引号 ( ") 是要使用的引号。

例如:

$ cat haystack
I found some straw in here!
$ needle=straw
$ sed "s/$needle/pins/" haystack
I found some pins in here!

让我们看一下使用弱引号 ( ") 和强引号 ( ') 时会发生什么:

$ set -x
$ sed "s/$needle/pins/" haystack
+ sed s/straw/pins/ haystack
I found some pins in here!
$ sed 's/$needle/pins/' haystack
+ sed 's/$needle/pins/' haystack
I found some straw in here!

正如您所看到的,使用弱引号,参数扩展是$needle根据 shell 的要求进行的 sed永远能看到它。使用强引号,这种情况不会发生,因此sed现在正在搜索正则表达式/$needle/,即“输入结束后跟字符串needle”,它永远不会匹配任何内容,因此不会进行替换。

相关内容