Làm cách nào tôi có thể lọc kết quả duy nhất từ ​​đầu ra grep?


75

Trong linux, tôi có thể grep một chuỗi từ một tệp bằng cách sử dụng grep mySearchString myFile.txt. Làm thế nào tôi chỉ có thể nhận được kết quả là duy nhất?

Câu trả lời:


125

Bạn có thể đạt được điều này với sortuniqcác tiện ích.

thí dụ:

[john @ awesome ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest"
kiểm tra
kiểm tra
kiểm tra
một bài kiểm tra khác
kiểm tra
[john @ awesome ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest" | sắp xếp | uniq
một bài kiểm tra khác
kiểm tra

tùy thuộc vào dữ liệu bạn có thể muốn sử dụng một số công tắc.


9
@ John T - Tôi khuyên bạn nên sử dụng sorttrước uniqtrong trường hợp dữ liệu không được đặt hàng. Nếu không uniqsẽ không hoàn toàn làm việc.
Studer

Bây giờ tôi có thể upvote! Bạn cũng đã giúp tôi viết kịch bản người khác ở đây;)
Studer

42
Sử dụng sort -uthay vì sort | uniq. Nó lưu một quá trình, giảm tổng I / O và giảm tổng số so sánh phải thực hiện.
Chris Johnsen

@ChrisJohnsen Bạn nên đưa ra nhận xét đó là một câu trả lời vì đó là một giải pháp tốt hơn sau đó là câu trả lời hiện tại
Nico Van Belle

1

Bạn có thể dùng:

grep -rohP "(mySearchString)" . | sort -u

-r: đệ quy

-o: chỉ in phần phù hợp của văn bản

-h: không in tên tập tin

-P: regex kiểu Perl (bạn có thể sử dụng -E thay vì tùy trường hợp của bạn)

sort -utốt hơn sort | uniq, như @Chris Johnsen đã chỉ ra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.