2011-10-11 27 views

Trả lời

125

định nghĩa viết tắt:

grep: tìm kiếm cụm từ cụ thể trong một tập tin

#usage 
$ grep This file.txt 
Every line containing "This" 
Every line containing "This" 
Every line containing "This" 
Every line containing "This" 

$ cat file.txt 
Every line containing "This" 
Every line containing "This" 
Every line containing "That" 
Every line containing "This" 
Every line containing "This" 

Bây giờ awksed là hoàn toàn khác so với grep. awksed là các bộ xử lý văn bản. Không chỉ họ có khả năng tìm thấy những gì bạn đang tìm kiếm trong văn bản, họ có khả năng loại bỏ, thêm và sửa đổi các văn bản là tốt (và nhiều hơn nữa).

awk chủ yếu được sử dụng để trích xuất và báo cáo dữ liệu. sed là trình chỉnh sửa luồng
Mỗi một trong số chúng có chức năng và đặc điểm riêng.

Ví dụ
Sed

$ sed -i 's/cat/dog/' file.txt 
# this will replace any occurrence of the characters 'cat' by 'dog' 

AWK

$ awk '{print $2}' file.txt 
# this will print the second column of file.txt 

Basic awk sử dụng:
Tính tổng/trung bình/max/min/etc. những gì bạn có thể cần.

$ cat file.txt 
A 10 
B 20 
C 60 
$ awk 'BEGIN {sum=0; count=0; OFS="\t"} {sum+=$2; count++} END {print "Average:", sum/count}' file.txt 
Average: 30 

tôi khuyên bạn nên đọc cuốn sách này: Sed & Awk: 2nd Ed.

Nó sẽ giúp bạn trở thành một người sử dụng sed/awk thành thạo trên bất kỳ môi trường Unix-like.

37

Grep hữu ích nếu bạn muốn tìm kiếm nhanh các dòng khớp với tệp. Nó cũng có thể trả lại một số thông tin đơn giản khác như kết hợp số dòng, số đối sánh và danh sách tên tệp.

Awk là toàn bộ ngôn ngữ lập trình được xây dựng xung quanh việc đọc tệp kiểu CSV, xử lý bản ghi và tùy chọn in ra tập dữ liệu kết quả. Nó có thể làm nhiều thứ nhưng nó không phải là công cụ dễ sử dụng nhất cho các nhiệm vụ đơn giản.

Sed rất hữu ích khi bạn muốn thay đổi tệp dựa trên cụm từ thông dụng. Nó cho phép bạn dễ dàng phù hợp với các phần của dòng, thực hiện sửa đổi và in ra kết quả. Nó ít diễn cảm hơn là lúng túng nhưng nó cho vay nó để sử dụng phần nào dễ dàng hơn cho các công việc đơn giản. Nó có nhiều toán tử phức tạp hơn mà bạn có thể sử dụng (tôi nghĩ nó thậm chí còn hoàn chỉnh), nhưng nói chung bạn sẽ không sử dụng các tính năng đó.

+1

Người ta có thể tìm kiếm một dòng trong một tệp có AWK nhanh như Grep. Đó là trường hợp đầu tiên được mô tả ở đây: [grep vs awk: 10 ví dụ về tìm kiếm mẫu (theunixschool)] (http://www.theunixschool.com/2012/09/grep-vs-awk-examples-for-pattern-search. html). – Hibou57

24

Tôi chỉ muốn đề cập đến một điều, có nhiều công cụ có thể xử lý văn bản, ví dụ: sắp xếp, cắt, tách, nối, dán, dấu phẩy, uniq, cột, rev, tac, tr, nl, pr, đầu, đuôi .....

chúng rất tiện dụng nhưng bạn phải tìm hiểu các tùy chọn của chúng v.v.

Cách lười biếng (không phải cách tốt nhất) để tìm hiểu xử lý văn bản có thể là: chỉ học grep, sed và awk. với ba công cụ này, bạn có thể giải quyết gần 99% các vấn đề xử lý văn bản và không cần phải ghi nhớ các cmd và tùy chọn khác nhau. :)

VÀ, nếu bạn đã học và sử dụng cả ba, bạn đã biết sự khác biệt. Trên thực tế, sự khác biệt ở đây có nghĩa là công cụ nào là giải quyết tốt loại vấn đề nào.

một cách lười biếng hơn có thể là học ngôn ngữ kịch bản (python, perl hoặc ruby) và thực hiện mọi xử lý văn bản với nó.

+2

Phụ thuộc vào sự phức tạp của công việc để thực hiện một lần so khớp mẫu. Nếu có rất nhiều logic ngoài ma thuật mẫu, Python sẽ là một lựa chọn tốt hơn, nếu logic xung quanh đơn giản hơn, SEd/Grep/AWK. – Hibou57

+1

Trên thực tế, theo dòng lý luận này, bạn có thể đề nghị chỉ học và sử dụng awk vì nó có thể làm hầu hết những gì sed và grep có thể. –