
この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
rocommunityを含む行(127.0.0.1を含む行を除く)を削除するためにsedをどのように更新しますか?
予想出力:
rocommunity hedona 127.0.0.1
syscontact linux 67
syslocation UNKNOWN
trapcommunity hedona
trapsink linux76 parshedona
答え1
2つの検索を組み合わせることができます。
sed '/rocommunity.*127\.0\.0\.1/p;/rocommunity/d' /path/to/input
/rocommunity.*127\.0\.0\.1/p
- rocommunity
for と一致する行からその127.0.0.1
行を印刷します。
/rocommunity/d
- 一致する行ではrocommunity
印刷しません。
その他の内容はすべて印刷されます。
ファイルを変更するには、ファイル必要な操作を確認してからをsed --in-place
使用してファイルを変更できます。
答え2
$ sed -n -e '/rocommunity.*127.0.0.1/p' -e '/rocommunity/!p' data.in >data.out
このsed
コマンドは最初に各行のデフォルト印刷をオフにし、次に(-n
)2つの編集コマンド(-e
)を使用します。最初は、その単語を含む行を印刷してrocommunity
から、127.0.0.1
その行の次の単語を印刷します。 2番目の編集コマンドは、含まれていないすべての行を印刷します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