No exemplo a seguir, sed
corresponde às linhas que começam com a a
ou a c
e imprime o primeiro caractere dessa linha ( a
ou 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
No entanto, as linhas que não correspondem ao padrão também são impressas. Como digo sed
para omitir as linhas que não correspondem ao padrão? Posso obter o efeito desejado combinando-o com grep
(a seguir), mas gostaria de saber se é sed
possível conseguir isso "sozinho".
$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'
output:
a
c
regex
sed
bash-scripting
freitass
fonte
fonte
Respostas:
Use a
no-print
flag (-n
) e imprima explicitamente comandos substitutos bem-sucedidos (s///p
):fonte