我还没有找到(也无法猜测)一个 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'