Предполагая, что данные структурированы таким образом, что вы всегда хотите использовать строку до и после этого, вы можете использовать переключатели grep -A
(after) и -B
(before), чтобы указывать, что они включают 1 строку перед совпадением и 1 строку после него:
$ grep -A 1 -B 1 "42B" sample.txt
Pseudo name=Apple
Code=42B
state=fault
Если вам нужны одинаковые номера строк до и после поискового запроса, вы можете использовать -C
переключатель (context):
$ grep -C 1 "42B" sample.txt
Pseudo name=Apple
Code=42B
state=fault
Если вы хотите быть более строгим при сопоставлении нескольких строк, вы можете использовать инструмент pcregrep
, чтобы сопоставить шаблон с несколькими строками:
$ pcregrep -M 'Pseudo.*\n.*42B.*\nstate.*' sample.txt
Pseudo name=Apple
Code=42B
state=fault
Приведенный выше шаблон соответствует следующему:
-M
- несколько строк
'Pseudo.*\n.*42B.*\nstate.*'
- соответствует группе строк, где первая строка начинается со слова, "Pseudo"
за которым следуют любые символы до конца строки \n
, за которыми следуют любые символы до строки, "42B"
за которыми следуют любые символы до другого конца строки ( \n
), за которым следует строка "state"
следуют любые символы.