Como fazer o sed omitir as linhas não correspondentes?

8

No exemplo a seguir, sed corresponde a linhas que começam com a ou c e imprime o primeiro caractere dessa linha ( a ou c ):

$ echo "ag
bh
ci
dj
ek
fl" | sed 's/\(a\|c\).//' # Matches lines starting with 'a' or 'c'.

output:
a
bh
c
dj
ek
fl

No entanto, as linhas que não correspondem ao padrão também são impressas. Como eu digo a sed para omitir as linhas que não correspondem ao padrão? Eu posso obter o efeito desejado combinando-o com grep (como segue), mas eu gostaria de saber se sed pode conseguir isso "por si só".

$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\).//'

output:
a
c
    
por freitass 24.01.2013 / 11:59

1 resposta

12

Use o no-print flag ( -n ) e imprima explicitamente os comandos substitutos bem-sucedidos ( s///p ):

 sed -n 's/\(a\|c\).//p'
    
por 24.01.2013 / 12:04