Sed para manter linha (s) de cabeçalho (s) + linhas correspondentes

0

Eu não encontrei (nem fui capaz de adivinhar) um comando sed que me permitiria:

  • Para manter: linhas específicas de acordo com seu índice (o cabeçalho, por exemplo)
  • Para manter: linhas que correspondem a um padrão (como grep)
  • Para excluir: as outras linhas

Qual é a melhor maneira de fazer isso?

Editar (exemplo):

ENTRADA:

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

OUTPUT: Depois de pedir para manter a linha 2 e o padrão 7777:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:7777            0.0.0.0:*               LISTEN
    
por Maxx 18.06.2015 / 15:11

2 respostas

0
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

Atualizar

Para sua entrada / saída

sed -n -e '2p' -e '/:7777/p'
    
por 18.06.2015 / 15:46
2

Você pode fazer isso facilmente com o sed:

$ sed -e '2{
  p
  d
}
/7777/!d' file

ou awk :

awk 'FNR==2 || /pattern/' file
  • 2 é o número da linha do cabeçalho, você pode alterá-lo para qualquer número de linha desejado.
  • pattern é o padrão que você deseja corresponder.
por 18.06.2015 / 15:20

Tags