Use o no-print
flag ( -n
) e imprima explicitamente os comandos substitutos bem-sucedidos ( s///p
):
sed -n 's/\(a\|c\).//p'
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
Tags regex sed bash-scripting