Я хочу сопоставить шаблон по нескольким строкам в сценарии оболочки. Мой вход как:Выражение соответствия между несколькими строками в сценарии оболочки
START <some data including white spaces>
<some data including white spaces, can span across multiple lines, number of lines are variable>
ID: n1 <some data including white spaces>
<some data including white spaces, can span across multiple lines, number of lines are variable>
END
START <some data including white spaces>
<some data including white spaces, can span across multiple lines, number of lines are variable>
ID: n2 <some data including white spaces>
<some data including white spaces, can span across multiple lines, number of lines are variable>
END
Я пытаюсь отобразить выходные данные с помощью регулярных выражений для конкретного ID только (например, n1 или n2.). Я попробовал START(.|\n)*ID: n1(.|\n)*END
regex, но он также извлекает данные ID: n2. Какие изменения следует внести в regex inorder для получения данных только определенного идентификатора?
Я использую команду cat inputfile | grep 'pattern' > outputfile
как команду.
Количество строк в каждом блоке, а также количество линий между START
и ID: n1
, ID: n1
и END
может быть переменным и, следовательно, с помощью головы/хвоста не является жизнеспособным вариантом. Кроме того, я хотел бы распечатать весь блок от START до END, когда идентификатор сопоставляется.
EDIT: Я попытался с помощью Online Regex Creator и может успешно соответствовать регулярному выражению
START[\s\S][^END]*ID: n1[\s\S][^END]*END
на моем входной файл.
Является ли Perl приемлемым? Легко в Perl ... – dawg