sed + 删除包含字符串的行,但带有的行除外

yae*_*ael 1 linux sed awk

此 sed 命令删除包含“rocommunity”一词的行:

sed -i '/rocommunity/d' snmpd.conf

rocommunity hedona 127.0.0.1
rocommunity hedona linux1 
rocommunity hedona linux12
rocommunity hedona linux13
rocommunity hedona linux15
rocommunity hedona linux16
rocommunity hedona linux17
syscontact linux 67
syslocation UNKNOWN
trapcommunity hedona
trapsink  linux76 parshedona
Run Code Online (Sandbox Code Playgroud)

如何更新我的 sed 以删除包含 rocommunity 的行,但带有 127.0.0.1 的行除外

预期输出:

rocommunity hedona 127.0.0.1
syscontact linux 67
syslocation UNKNOWN
trapcommunity hedona
trapsink  linux76 parshedona
Run Code Online (Sandbox Code Playgroud)

Dop*_*oti 5

简单地结合两个搜索:

sed  '/rocommunity.*127\.0\.0\.1/p;/rocommunity/d' /path/to/input
Run Code Online (Sandbox Code Playgroud)

/rocommunity.*127\.0\.0\.1/p- 在匹配 forrocommunity后跟匹配 for127.0.0.1的行上,打印该行

/rocommunity/d- 在与 for 匹配的行上rocommunity,不打印

其他所有内容都将被打印。

要更改文件文件,一旦您确认您想要的是正在执行的操作,您可以使用sed --in-place对文件进行更改。