我正在使用 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
”,它永远不会匹配任何内容,因此不会进行替换。