grep cho chuỗi không có trước chuỗi khác


10

Có thể, bằng cách sử dụng grep, để tìm kiếm các trường hợp John Smithnhưng loại trừ các trường hợp Mr John Smith?

Câu trả lời:


9

Điều này có thể được giải quyết bằng cách sử dụng biểu thức chính quy với giao diện phủ định (được hỗ trợ bằng thực nghiệm grepnhư được chỉ ra bởi nhận xét từ sắp xếp):

$ grep -P '(?<!Mr )John Smith' file

Vì hỗ trợ chỉ là thử nghiệm, nên bạn có thể muốn sử dụng perlthay thế:

$ perl -nle 'print if /(?<!Mr )John Smith/' file

Nó được hỗ trợ thử nghiệm trong grep : echo $string | grep -P '(?<!Mr )John Smith'.
sắp xếp

@arrange Thật vậy. Cảm ơn, tôi sẽ cập nhật câu trả lời.
jcollado

6

Bạn có thể thực thi

command | grep 'John Smith' | grep -v 'Mr John Smith'

1
Ý tưởng hay, nhưng sẽ không hoạt động nếu đường dây cóJohn Smith Mr John Smith John Smith
Ron

1

Để sử dụng biểu thức thông thường, sử dụng ^ và $

grep "^John Smith$"

^ là khớp từ đầu $ là khớp từ cuối.

Cú pháp sẽ thay đổi tùy thuộc vào những gì bạn đang tìm kiếm trong tập tin nào.

Bạn có thể sử dụng các biểu thức thông thường với sed, grep, awk ....

Thí dụ

bodhi@Ubuntu:~ cat file
Mr John Smith
John Smith
John
Smith

bodhi@Ubuntu:~ grep "^John Smith$" file
John Smith

OP không yêu cầu chuỗi là thứ duy nhất trên dòng của nó.
enzotib
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.