Dans l'exemple suivant, fait sed
correspondre les lignes commençant par un a
ou un c
et imprime le premier caractère de cette ligne ( 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
Cependant, les lignes qui ne correspondent pas au motif sont également imprimées. Comment puis-je dire sed
d'omettre les lignes qui ne correspondent pas au modèle? Je peux obtenir l'effet souhaité en le combinant avec grep
(comme suit) mais je voudrais savoir si je sed
peux y parvenir "par lui-même".
$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'
output:
a
c
regex
sed
bash-scripting
freitass
la source
la source
Réponses:
Utilisez le
no-print
flag (-n
) et imprimez explicitement les commandes de substitution réussies (s///p
):la source