W poniższym przykładzie sed
dopasowuje linie rozpoczynające się od a a
lub a c
i wypisuje pierwszy znak tej linii ( a
lub 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
Jednak linie, które nie pasują do wzoru, są również drukowane. Jak powiedzieć, sed
aby pominąć linie, które nie pasują do wzorca? Mogę uzyskać pożądany efekt, łącząc go z grep
(jak poniżej), ale chciałbym wiedzieć, czy sed
mogę to osiągnąć „sam”.
$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'
output:
a
c
regex
sed
bash-scripting
freitass
źródło
źródło
Odpowiedzi:
Użyj
no-print
flag (-n
) i jawnie wypisz udane polecenia zastępcze (s///p
):źródło