sed 保留标题行+匹配行

sed 保留标题行+匹配行

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

相关内容