次のことができるsedコマンドが見つかりませんでした(推測できません)。
- インデックスベースの保持:特定の行(例:ヘッダ)
- 保持:パターンに一致する行(例:grep)
- 削除:他の行
最良のアプローチは何ですか?
編集(例):
入力する:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 188.165.65.214:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.2:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:7777 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:587 0.0.0.0:* LISTEN
tcp6 0 0 :::53 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:953 :::* LISTEN
tcp6 0 0 :::443 :::* LISTEN
出力:ライン2とパターン7777を維持するように要求した後:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:7777 0.0.0.0:* LISTEN
答え1
sedを使えば簡単にできます。
$ sed -e '2{
p
d
}
/7777/!d' file
またはawk
:
awk 'FNR==2 || /pattern/' file
2
はヘッダーの行番号なので、必要な行番号に変更できます。pattern
一致させたいパターンです。
答え2
christian@fujiu1404:~/tmp$ cat f1
line 1 l
aaa bbb ccc ddd
111 111 111 111 abc
222 222 222 222
333 333 333 333 abc
christian@fujiu1404:~/tmp$ sed -n -e '2p' -e '/abc/p' f1
aaa bbb ccc ddd
111 111 111 111 abc
333 333 333 333 abc
修正する
入力/出力用
sed -n -e '2p' -e '/:7777/p'