此 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
如何更新我的 sed 以删除包含 rocommunity 的行(包含 127.0.0.1 的行除外)
预期输出:
rocommunity hedona 127.0.0.1
syscontact linux 67
syslocation UNKNOWN
trapcommunity hedona
trapsink linux76 parshedona
答案1
只需组合两个搜索即可:
sed '/rocommunity.*127\.0\.0\.1/p;/rocommunity/d' /path/to/input
/rocommunity.*127\.0\.0\.1/p
- 在匹配 forrocommunity
后跟匹配 for 的行上127.0.0.1
,打印该行
/rocommunity/d
- 在与 匹配的行上rocommunity
,不打印
其他所有内容都将被打印。
要更改文件 file 一旦您确认了您想要的正在执行的操作,您就可以使用 来sed --in-place
对文件进行更改。
答案2
$ sed -n -e '/rocommunity.*127.0.0.1/p' -e '/rocommunity/!p' data.in >data.out
该sed
命令首先关闭每行的默认打印 ( -n
),然后使用两个编辑命令 ( -e
)。第一个将打印包含该单词的任何行rocommunity
,然后127.0.0.1
在该行中打印后面的单词。第二个编辑命令将打印所有不包含 的行rocommunity
。
问题开头的数据:
$ sed -n -e '/rocommunity.*127.0.0.1/p' -e '/rocommunity/!p' data.in
rocommunity hedona 127.0.0.1
syscontact linux 67
syslocation UNKNOWN
trapcommunity hedona
trapsink linux76 parshedona
答案3
如果匹配“rocommunity”和“127.0.0.1”则分支到结束。并将打印该行。
sed -e '/rocommunity{/127\.0\.0\.1/b' -e 'd;}' file
通过 GNU 实现sed
,您可以缩短为:
sed '/rocommunity/{/127\.0\.0\.1/b;d}' file