2012-11-04 24 views
16

Tôi muốn grep tệp bằng một từ, nói "AAA" và kết thúc bằng khoảng trắng hoặc dòng mới. Tôi biết làm thế nào để viết này một cách riêng biệt, như sau, nhưng có vấn đề trong việc kết hợp chúng (theo nghĩa là nó kết quả đầu ra cả hai VVV AAAAAA VVV).cách sử dụng grep để đối sánh với khoảng trắng hoặc dòng mới

$echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA$" 
>VVV AAA 
$echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA[[:space:]]" 
>AAA VVV 

Tôi đã cố gắng sử dụng [], nhưng không thành công ..

Trả lời

18

Nếu bạn đang tìm kiếm từ AAA tiếp theo không gian bất cứ nơi nào trong chuỗi, hoặc vào cuối dòng, sau đó sử dụng

grep -P "AAA(|$)" 
2

Sử dụng "AAA\b" nếu được chấp nhận cũng khớp với AAA theo sau bởi bất kỳ ký tự không phải chữ và số nào khác. Theo số grep man pages, \b khớp với chuỗi trống ở cạnh của một từ.

$ echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA\b" 
AAA VVV 
VVV AAA 
+2

Sử dụng '\ b' sẽ phù hợp cũng như đầu vào ' AAA-BBB' –

+0

Xin cảm ơn, bạn đã đúng. Tôi đang cập nhật câu trả lời của mình. –

9

Bạn có thể sử dụng tùy chọn -e grep để chọn đồng thời nhiều mẫu:

grep -e "AAA$" -e "AAA[[:space:]]" 

Từ người đàn ông grep:

-e PATTERN, --regexp=PATTERN 
     Use PATTERN as the pattern. This can be used to specify 
     multiple search patterns, or to protect a pattern beginning with 
     a hyphen (-). (-e is specified by POSIX.) 
Các vấn đề liên quan