awk: отображение сопоставленного регулярного выражения (многострочный)

У меня есть файл, который выглядит так:

SF:/home/developer/project/test/resources/somefile.js
DA:1,2
DA:3,2
end_of_record
SF:/home/developer/project/src/resources/otherfile.js
DA:9,2
DA:15,2
DA:22,2
end_of_record

...some more SF:/home/xxx and end_of_record lines...

Файл состоит из блоков, начинающихся сSF: ... и заканчиваяend_of_record, Обратите внимание, что количество строк между (DA:x,x) может быть разным. Я хочу напечатать все блоки со строкой & quot; test & quot; в первой строке (например, «SF: / home / developer /»)test/resources/..." Вот). Для этого примера мой требуемый вывод будет:

SF:/home/developer/project/test/resources/somefile.js
DA:1,2
DA:3,2
end_of_record

Я хочу сделать это наLinux среда.

Моей первой попыткой было сделать это с помощью & quot; sed & quot; команда, но после некоторого исследования это выглядело как "awk" это более подходящий инструмент для выполнения многострочных операций.

Используя awk и Regex, это команда, которая у меня есть до сих пор:

awk '/SF[:\/a-zA-Z0-9]*test[\/A-Za-z0-9.,:\n]*end_of_record/ {print}' FS="\n" RS="" examplefile

Но это выводит полныйexamplefileа не только блоки, содержащие «тест» в первой строке. Я не уверен, если мой Regex не прав или я что-то упустил в моемawk вызов.

Как я могу получить только блок с & quot; тестом & quot; в первой строке?

Ответы на вопрос(2)

Ваш ответ на вопрос