Để sử dụng grep
cho hai dòng khác nhau, tìm kiếm cả hai mẫu
$ grep -e sweet -e lemon file_type
This is a sweet
lemon.
Hoặc sử dụng xen kẽ
$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.
Để có được dòng tiếp theo sau một mẫu, bạn có thể sử dụng tùy chọn ngữ cảnh
$ grep -A1 sweet file_type
This is a sweet
lemon.
Nhưng nếu bạn đang tìm kiếm một cách rõ ràng cho một mô hình multiline, đó là bởi vì khó grep
nghĩ trong dòng ... . Bạn .*
sẽ nắm bắt mọi thứ giữa "ngọt" và "chanh" trên đường dây . Chúng ta có thể lấy "chanh" trên dòng tiếp theo bằng -P
cách sử dụng \n
để khớp với dòng mới và bằng cách nói grep
tệp bị tách biệt với -z
:
$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.
Ghi chú:
-E
Sử dụng các biểu thức chính quy mở rộng (để sử dụng |
ký tự thay thế mà không cần phải thoát nó)
-An
In các dòng bổ sung sau mẫu, trong đó n là số lượng dòng để in
-P
Sử dụng các biểu thức chính quy theo kiểu perl ("thử nghiệm" trong grep
- cài đặt pcregrep
thay thế để hỗ trợ regex perl tốt hơn)
-z
Sử dụng ký tự null làm dấu phân cách (chỉ giả vờ trong trường hợp này, nhưng grep
sẽ lấy từ của chúng tôi cho nó)
-o
chỉ in phần phù hợp
grep -zP
lệnh sẽ hoạt động trong trường hợp cụ thể này (một tệp bao gồm chính xác hai dòng), nhưng nhìn chung, nó sẽ coi bất kỳ tệp phân tách dòng mới thông thường nào là một dòng, do đó, bỏ toàn bộ nội dung tệp (nếu có khớp ở đâu đó) hoặc không có gì; thông thường đó không phải là những gì mọi người sử dụnggrep
cho.