在 sed 中查找和替换排除案例

Jac*_*din 5 linux bash sed

我试图sed在某个模式后添加一个字符串,但我想排除已经存在附加字符串的情况。

例如:

"text.txt"

Hello
Bar
Hello world!
Run Code Online (Sandbox Code Playgroud)

如果我使用sed -i -e 's/Hello/Hello world!' text.txt第三行就变成

Hello world! world!

但我想保持它完好无损。

我发现了这个相关的问题,但并非我的文件中的所有行都需要修改。

有人有这个食谱吗?

cho*_*oba 6

您的问题的答案有点隐藏在相关问题的答案之一中:

/Hello world!/ ! s/Hello/Hello world!/
Run Code Online (Sandbox Code Playgroud)

它的第一部分是一个“地址”,即下面的命令只适用于匹配它的行。在!否定情况下,即,该命令将只被应用到线匹配的地址。因此,换句话说,替换HelloHello world!上不包含行Hello world!

  • 这可能更清楚地表述为 `/Hello world!/! s/Hello/Hello world!/`(注意 `!` 的位置)...这样否定与地址相关联,而不是与替换相关联。 (2认同)