Sed命令仅在第一次出现的特定工作后添加文本

时间:2015-03-30 23:03:36

标签: macos sed

我想在文件中的特定单词后添加一些单词。

示例:

flags:ia
minfree:5
naflags:ia

我想在"标志之后添加,lo,ad,fd,fm,-all:ia"我使用了以下see命令:

sudo sed -i.bak "s/flags:ia[^)]*/&,lo,ad,fd,fm,-all/" /etc/security/audit_control

然而我的输出结束了;

flags:ia,lo,ad,fd,fm,-all
minfree:5
naflags:ia,lo,ad,fd,fm,-all

我怎样才能使它只影响"标志:"而不是" naflags:" ?

1 个答案:

答案 0 :(得分:1)

您需要使用\0代替&来解决替换模式中的当前匹配问题:

sudo sed -i.bak 's/^flags:ia[^)]*/\0,lo,ad,fd,fm,-all/' /etc/security/audit_control

我不确定您使用[^)]*的原因。这可能取决于您的实际输入数据。只知道你在问题中显示的输入我会预期[^[:space:]]*,或者不是那样。


对于OSX个用户。事实证明,上述命令不适用于OSX(我无法测试此问题,因为我使用Linux)。但是,我们可以在下面的评论中找到以下命令:

sed '/^flags:ia[^)]*/s/$/,lo,ad,fd,fm,-all/' input.file