Giả sử dữ liệu được cấu trúc sao cho luôn luôn là dòng trước và sau mà bạn muốn, bạn có thể sử dụng các công tắc -A
(sau) và -B
(trước) của grep để bảo nó bao gồm 1 dòng trước khớp và 1 dòng sau nó:
$ grep -A 1 -B 1 "42B" sample.txt
Pseudo name=Apple
Code=42B
state=fault
Nếu bạn muốn các dòng số giống nhau trước và sau cụm từ tìm kiếm, bạn có thể sử dụng công tắc -C
(ngữ cảnh):
$ grep -C 1 "42B" sample.txt
Pseudo name=Apple
Code=42B
state=fault
Nếu bạn muốn nghiêm ngặt hơn khi khớp nhiều dòng bạn có thể sử dụng công cụ pcregrep
, để khớp với một mẫu trên nhiều dòng:
$ pcregrep -M 'Pseudo.*\n.*42B.*\nstate.*' sample.txt
Pseudo name=Apple
Code=42B
state=fault
Các mẫu trên phù hợp như sau:
-M
- nhiều dòng
'Pseudo.*\n.*42B.*\nstate.*'
- khớp với một nhóm các chuỗi trong đó chuỗi đầu tiên bắt đầu bằng từ được "Pseudo"
theo sau bởi bất kỳ ký tự nào cho đến hết dòng \n
, theo sau là bất kỳ ký tự nào cho đến khi chuỗi "42B"
theo sau bởi bất kỳ ký tự nào cho đến cuối dòng khác ( \n
), theo sau là chuỗi "state"
tiếp theo là bất kỳ nhân vật nào.