如何执行带有&&和'/'等特殊字符的SED命令以进行搜索和替换?

时间:2019-12-02 05:48:50

标签: linux shell unix sed

我有一个搜索字符串,例如&& !this.peekStartsWith('//'),并希望用空格代替。 我尝试过

sed -i 's/&& !this.peekStartsWith('\/\/')/ /g' dist/vendor.bundle.js

但是,出现类似

的错误
  

bash:!this.peekStartsWith:未找到事件

任何人都可以帮助解决此问题吗?

2 个答案:

答案 0 :(得分:4)

我可以重现该错误。您首先需要按以下步骤关闭history,因为放置在!命令中的文本中有sed会导致此错误。

set +o history

现在,当您按以下方式运行sed命令时,它运行良好。

echo "test && !this.peekStartsWith('//') bla" | sed "s|&& !this\.peekStartsWith('//')||g"
test  bla

要重新启动history,您可以使用:

set -o history

答案 1 :(得分:1)

只有在转义!

时,我才能使用此功能
sed "s|&& \!this\.peekStartsWith('//')| |g" file

示例文件

cat file
some data&& !this.peekStartsWith('//')more data

测试

sed "s|&& \!this\.peekStartsWith('//')||g" file
some datamore data
sed "s|&& \!this\.peekStartsWith('//')| |g" file
some data more data
sed "s|&& \!this\.peekStartsWith('//')|***|g" file
some data***more data