Trong ví dụ sau, sed
khớp các dòng bắt đầu bằng một a
hoặc a c
và in ký tự đầu tiên của dòng đó ( a
hoặc 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
Tuy nhiên, các dòng không khớp với mẫu cũng được in ra. Làm thế nào để tôi biết sed
bỏ qua các dòng không khớp với mẫu? Tôi có thể đạt được hiệu quả mong muốn bằng cách kết hợp nó với grep
(như sau) nhưng tôi muốn biết liệu sed
có thể đạt được "chính nó" hay không.
$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'
output:
a
c
Nó không quan trọng đối với những gì bạn thực sự muốn biết, nhưng mô hình của bạn nên bắt đầu bằng ^ vì vậy nó được neo vào đầu dòng. Như được mã hóa, nó sẽ khớp với a hoặc c ở bất kỳ đâu trong dòng miễn là nó không phải là ký tự cuối cùng.
—
Joe