Sed 命令仅在第一次出现的特定工作后添加文本
Sed command to add text after specific work for only the first occurence
我想在文件中的特定单词后添加一些单词。
示例:
flags:ia
minfree:5
naflags:ia
我想在 "flags:ia" 之后添加 ,lo,ad,fd,fm,-all 我使用了以下命令:
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
如何让它只影响 "flags:" 而不是 "naflags:"?
您需要使用 [=12=]
而不是 &
来解决替换模式中的当前匹配项:
sudo sed -i.bak 's/^flags:ia[^)]*/[=10=],lo,ad,fd,fm,-all/' /etc/security/audit_control
我不确定你为什么要使用 [^)]*
。这可能取决于您实际输入的数据。只知道你在问题中显示的输入,我会期望 [^[:space:]]*
相反,或者什么都不知道。
对于 OSX
用户。原来上面的命令在 OSX
上不起作用(我无法测试它,因为我使用的是 Linux
)。但是,我们可以在下面的评论中发现以下命令将起作用:
sed '/^flags:ia[^)]*/s/$/,lo,ad,fd,fm,-all/' input.file
我想在文件中的特定单词后添加一些单词。
示例:
flags:ia
minfree:5
naflags:ia
我想在 "flags:ia" 之后添加 ,lo,ad,fd,fm,-all 我使用了以下命令:
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
如何让它只影响 "flags:" 而不是 "naflags:"?
您需要使用 [=12=]
而不是 &
来解决替换模式中的当前匹配项:
sudo sed -i.bak 's/^flags:ia[^)]*/[=10=],lo,ad,fd,fm,-all/' /etc/security/audit_control
我不确定你为什么要使用 [^)]*
。这可能取决于您实际输入的数据。只知道你在问题中显示的输入,我会期望 [^[:space:]]*
相反,或者什么都不知道。
对于 OSX
用户。原来上面的命令在 OSX
上不起作用(我无法测试它,因为我使用的是 Linux
)。但是,我们可以在下面的评论中发现以下命令将起作用:
sed '/^flags:ia[^)]*/s/$/,lo,ad,fd,fm,-all/' input.file