对于 Sed,我想使用“!”排除与“he”匹配的行。这是一个例子。
echo "hello" |sed "/he/!s/hello/hi/"
令我惊讶的是,我的 ubuntu 14 又回来了
“bash !s/hello/hi:未找到事件”
错误。有任何想法吗?如何使用 Sed 排除与模式相对应的行范围?
最佳答案
您已启用历史扩展。您需要使用 set +H
禁用它。
示例
让我们启用历史扩展并运行您的命令:
$ set -H
$ echo "hello" |sed "/he/!s/hello/hi/"
bash: !s/hello/hi/: event not found
现在,让我们禁用它并观察该命令现在运行正确且没有错误:
$ set +H
$ echo "hello" |sed "/he/!s/hello/hi/"
hello
替代方案
如果您想保持历史扩展启用,则用单引号引用您的字符串:
$ set -H
$ echo "hello" |sed '/he/!s/hello/hi/'
hello
关于sed - 使用 Sed 时排除行范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40205672/