Como fazer com que o sed omita linhas não correspondentes?

Como fazer com que o sed omita linhas não correspondentes?

No exemplo a seguir, sedcorresponde às linhas que começam com um aou a ce imprime o primeiro caractere dessa linha ( aou c):

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

output:
a
bh
c
dj
ek
fl

Contudo, as linhas que não correspondem ao padrão também são impressas. Como posso sedomitir as linhas que não correspondem ao padrão? Posso obter o efeito desejado combinando-o com grep(como segue), mas gostaria de saber se sedposso conseguir isso "por si só".

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

output:
a
c

Responder1

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

 sed -n 's/\(a\|c\)./\1/p'

informação relacionada