Stimmt im folgenden Beispiel sed
mit Zeilen überein, die mit einem a
oder a beginnen, c
und gibt das erste Zeichen dieser Zeile ( a
oder c
) aus:
$ 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
Die Linien, die nicht zum Muster passen, werden jedoch auch ausgedruckt. Wie kann ich sed
die Linien weglassen, die nicht zum Muster passen? Ich kann den gewünschten Effekt erzielen, indem grep
ich ihn mit (wie folgt) kombiniere, aber ich würde gerne wissen, ob sed
dies "von selbst" erreicht werden kann.
$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'
output:
a
c
regex
sed
bash-scripting
freitass
quelle
quelle
Antworten:
Verwenden Sie das
no-print
Flag (-n
) und drucken Sie explizit erfolgreiche Ersatzbefehle (s///p
):quelle