
Im folgenden Beispiel sed
werden Zeilen verglichen, die mit einem a
oder einem beginnen c
, und das erste Zeichen dieser Zeile ( a
oder c
) wird ausgegeben:
$ 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
Allerdings werden auch die Zeilen ausgedruckt, die nicht dem Muster entsprechen. Wie erkläre ich, dass sed
die Zeilen, die nicht dem Muster entsprechen, weggelassen werden sollen? Ich kann den gewünschten Effekt erzielen, indem ich es mit grep
(wie folgt) kombiniere, aber ich würde gerne wissen, ob sed
das „allein“ erreicht werden kann.
$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'
output:
a
c
Antwort1
Verwenden Sie das no-print
Flag ( -n
) und drucken Sie erfolgreiche Ersetzungsbefehle explizit aus ( s///p
):
sed -n 's/\(a\|c\)./\1/p'