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; в первой строке?