sed - 使用 Sed 时排除行范围

标签 sed

对于 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/

相关文章:

regex - 大文件上的多行正则表达式匹配字符串替换

regex - 如何使用 sed 匹配任意 URL?

bash - 删除 csv 文件的第一列

bash - 将 "#"、 "$"、 "%"、 "&"和 "_"替换为 "\#"、 "\$"、 "\%"、 "\&"和 "\_"以及 0x104567910 和 0x104567910

regex - 种子 | awk 在匹配下一行后删除行

linux - sed 只适用于一行

bash - 搜索字段并显示下一个数据

bash - 如何使用 sed 或 awk 在文件的特定行插入特定字符?

unix - sed 替换上下文中 d 和 t 的函数

regex - 将文件中的部分 url 替换为 sed