sed
và awk
là supersets của grep
, có những điều dễ dàng hơn để làm với cái này hay cái khác.
grep foo
có thể được viết sed '/foo/!d'
hoặc awk /foo/
, nhưng xem xét:
grep -i foo
sẽ phải là sed '/[fF][oO][oO]/!d'
trừ khi bạn muốn xem xét các phần mở rộng không chuẩn như GNU sed '/foo/I!d'
. Hoặc với awk
: awk 'tolower($0) ~ /foo/'
hoặc một lần nữa sử dụng phần mở rộng GNU : awk -v IGNORECASE=1 /foo/
.
Những công cụ khác nhau rất tốt và cồng kềnh với các công cụ khác:
grep
grep
là một công cụ đơn giản nhưng có các chế độ hoạt động rất chuyên dụng khó tái tạo bằng awk
hoặc sed
:
grep -i
đối với trường hợp khớp không nhạy cảm (xem ở trên)
grep -Fe "$string"
cho tìm kiếm chuỗi cố định ( export string; awk 'index($0, ENVIRON["string"])'
với awk
, không có tương đương trực tiếp với sed
).
- (không chuẩn)
grep -r
cho tìm kiếm đệ quy
- (không chuẩn)
grep -P
/ pcregrep
cho regexps giống như perl (một số sed
triển khai có hỗ trợ regex giống như perl mặc dù không phải là chính nhất)
- (không chuẩn)
grep -o
để trả về phần khớp (một số dòng awk
hoặc sed
làm tương tự)
- (không chuẩn)
grep -A/B/C
để trả về bối cảnh xung quanh trận đấu (một lần nữa đau đớn phải làm theo cách tương tự với sed
hoặc awk
)
quyến rũ
s/foo/bar/
: sed
'S s
lệnh có nhiều tính năng mà khó thực hiện trong awk
như:
s/foo\(.*\)bar/\1/g
: chụp (mặc dù GNU awk có gensub()
phần mở rộng cho điều đó)
s/foo/bar/3
: thay thế lần xuất hiện thứ 3 trên mỗi dòng
- (không chuẩn): chỉnh sửa tệp tại chỗ (mặc dù hiện tại nó cũng được GNU hỗ trợ
awk
).
ôi
awk
là tính năng phong phú nhất trong ba.
- tốt cho việc xử lý số
- tốt để xử lý đầu vào được định dạng trong các cột.
- tốt để trích xuất và kết hợp dữ liệu từ các nguồn khác nhau, với các mảng kết hợp của nó.
perl
perl
như một công cụ báo cáo và trích xuất thực tế có những công cụ tốt nhất. Đó là những gì nó được thiết kế ban đầu (là công cụ làm cho tất cả những thứ đó sed
/ awk
lỗi thời).
Nắm vững perl
để làm xử lý văn bản không cung cấp một lợi thế nghiêm trọng. Tôi khuyên bạn nên dành một chút thời gian cho nó, thậm chí trước khi xem các sed
lệnh ít phổ biến hơn .
hiệu suất
Theo nguyên tắc thông thường, công cụ càng chuyên dụng, hiệu quả nhất trong công việc. Nhưng điều đó cũng phụ thuộc rất nhiều vào việc thực hiện, nhiệm vụ và một vài yếu tố và hiệu suất khác có thể có sự đánh đổi có thể cần phải tính đến.
Ví dụ, có một số grep
hoặc sed
triển khai rất nhanh, nhưng chẳng hạn, chúng không hỗ trợ các ký tự đa nhân nên chỉ có thể hoạt động chính xác trên văn bản US-English ở các địa phương nhiều byte. Hoặc chúng nhanh vì chúng hoạt động trên một bộ đệm có độ dài cố định nhỏ và do đó không thể hoạt động trên đầu vào tùy ý ...