Dalam contoh berikut, sed
cocokkan garis yang dimulai dengan a a
atau a c
dan cetak karakter pertama dari garis itu ( a
atau 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
Namun, garis-garis yang tidak cocok dengan pola juga dicetak. Bagaimana saya mengatakan sed
untuk menghilangkan garis yang tidak cocok dengan pola? Saya dapat memperoleh efek yang diinginkan dengan menggabungkannya dengan grep
(sebagai berikut) tetapi saya ingin tahu apakah sed
dapat mencapai itu "dengan sendirinya".
$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'
output:
a
c
regex
sed
bash-scripting
freitas
sumber
sumber
Jawaban:
Gunakan
no-print
flag (-n
) dan cetak perintah pengganti yang berhasil secara eksplisit (s///p
):sumber