Tôi sử dụng sed cho một loạt ptovess nơi tôi không thể làm điều đó với awk. Vould awk đã làm điều đó? Hoặc là nó là một vấn đề của sự lựa chọn và gọi awk và sed tương đương cho việc sử dụng. Cả hai đều thực hiện tìm kiếm thông thường thay thế tương tự với i/o. Có một ví dụ tốt những gì không thể được thực hiện với một mà người kia có thể?Điều gì có thể làm awk rằng sed có thể không?
Trả lời
Một điểm khác biệt chính là chương trình awk có thể duy trì trạng thái và có thể hoạt động bằng cách sử dụng nhiều lần truyền trên cùng một dữ liệu. Một lời gọi sed là nhất thiết phải vượt qua trạng thái vô hạn vì sed (Stream EDitor) vốn đã định hướng luồng. Lợi thế, mặc dù, là điều này làm cho sed đơn giản hơn và thích hợp hơn để sử dụng trong các chuỗi ống.
SED là trình chỉnh sửa luồng và do đó không có biến và một số cấu trúc khác như AWK có. AWK là một ngôn ngữ hoàn toàn chính thức.
AWK, không giống như sed, tốt cho việc tìm kiếm và thay thế cho bất kỳ mã unicode hoặc ascii nào? do đó, xử lý tất cả các ký tự điều khiển bao gồm dòng mới, EOF, e.t.c. dưới dạng nhị phân? – barlop
G'day,
Awk mạnh hơn. sed có xu hướng hạn chế hơn trong những gì nó có thể làm.
Sed là tốt cho các thay đổi dựa trên dòng dữ liệu. Nó có một số cấu trúc vòng lặp đơn giản, công cụ regexp ed/ex/vi thông thường và những thứ thay thế, câu lệnh ghép, quyết định, vv Hầu hết mọi người sử dụng nó để sửa đổi dữ liệu đường ống.
Làm mờ là tốt để lọc hoặc sắp xếp lại dữ liệu. Nó chủ yếu được sử dụng để báo cáo.
Tôi khuyên bạn nên xem cuốn sách tuyệt vời của Dale Dougherty "sed & awk" (sanitised Amazon link). BTW Nó có một trong những giải thích tốt nhất của regexps trong đó là tốt.
Nhiều người sẽ nói sử dụng Perl anyway! (-:
Edit: Quên nói rằng ngôn ngữ awk là khá C như đó là không ngạc nhiên khi cho rằng 'k' trong awk là viết tắt của Brian Kernighan Có Đó Brian Kernighan
..!Ngoài ra, sed chỉ hoạt động trên dòng dữ liệu trong khi awk hoạt động trên cả hai dòng dữ liệu và các tập tin.
HTH
cổ vũ, sed chỉ hoạt động trên dòng dữ liệu trong khi awk hoạt động trên cả hai dòng dữ liệu và các tập tin.
GNU sed thực sự hỗ trợ chỉnh sửa tệp tại chỗ. –
Đúng.Nhưng, như bạn nói, tùy chọn -s là GNU cụ thể. Triển khai Vanilla sed dựa trên luồng. Đó là nó. –
Trong bản gốc (và vẫn là tốt nhất) cuốn sách, The AWK Programming Language, sau đây được thực hiện (trong số nhiều thứ khác):
- một nhà lắp ráp đơn giản
- đệ quy gốc biên dịch
- một chỉ mục văn bản chương trình
Hãy thử làm điều đó với sed.
Tôi nghĩ rằng đây là câu trả lời cho một câu hỏi hoàn toàn khác. Câu hỏi đặt ra là "Điều gì là không thể mà sed có thể không?", Không phải là "những gì có thể awk làm điều đó sed không thể". Chỉ cần nói rằng "awk là tốt hơn, mạnh mẽ hơn, nhanh hơn" không trả lời được câu hỏi nào cả. –
Điều duy nhất tôi có thể nghĩ là sed có thể thực hiện ít thay đổi trong số lượng char ít hơn. Vì vậy, để chỉnh sửa nhanh trên trình bao trực tiếp, bạn nên nhập nhanh hơn.
- 1. Tôi có thể làm gì khi sử dụng awk mà tôi không thể làm trong Perl?
- 2. Điều gì có thể WinDbg cho tôi biết rằng Visual Studio không thể?
- 3. Sed and Awk Escaping Ampersands (&)
- 4. \ 1 trong sed làm gì?
- 5. Điều gì có thể Devise làm cho Authlogic có thể không?
- 6. Sự khác biệt giữa sed và awk là gì?
- 7. Điều gì có thể được khởi tạo?
- 8. sed hoặc awk multiline thay thế
- 9. Python hoặc awk/sed để làm sạch dữ liệu
- 10. Hãy nhớ rằng hãy nhớ rằng không có gì là
- 11. Điều gì có thể truy cập/không thể truy cập có nghĩa là trong git?
- 12. khác biệt giữa grep, awk và sed
- 13. Awk kết hợp nhiều dòng có điều kiện
- 14. Điều gì có thể làm giảm hiệu suất MySqls?
- 15. Java có thể làm điều gì đó như thể loại trong Mục tiêu C không?
- 16. Xóa dòng mới sau một văn bản cụ thể qua bash/awk/sed/perl
- 17. Mũi tên có thể làm gì mà Monads không thể?
- 18. Phing có thể làm gì mà Ant không thể?
- 19. Làm cách nào để thêm dấu ngoặc kép vào một dòng có SED hoặc AWK?
- 20. Làm thế nào tôi có thể cắt không gian màu trắng từ một biến trong awk?
- 21. GlStencil có thể làm gì?
- 22. Có điều gì tôi không thể làm với bộ ria mép không?
- 23. Làm thế nào tôi có thể kiểm tra rằng "cái gì" là một băm trong Perl?
- 24. Điều gì có thể và tôi không thể chuyên về không gian tên std?
- 25. Dll Injection - Điều gì có thể với nó?
- 26. Tôi đang bối rối ở đây về awk, sed, v.v.
- 27. Điều gì có thể nói về lớp java này?
- 28. có thể gắn điều khiển với điều khiển khác không?
- 29. Awk có điều kiện tổng hợp từ một tệp CSV
- 30. Thẻ video Apache + HTML5 - Điều gì có thể xảy ra?
Tôi không thấy rằng sed là "thích hợp hơn để sử dụng trong các chuỗi ống" - chỉ vì awk CAN thực hiện nhiều lần, không có gì buộc bạn thực sự làm như vậy. Đối với nhiều nhiệm vụ liên quan đến đường ống (chọn các trường cụ thể, ví dụ) awk thì đơn giản hơn nhiều so với sed. –
@anon Nó đánh tôi như là lẻ như thế nào bạn đang chuyển thread này trong một số công cụ "awk vs sed". Không hữu ích chút nào. – ata
Tôi đã thay đổi điều này thành câu trả lời được chấp nhận. Cảm ơn! –