Многострочное получение группы между фигурными скобками

У меня есть что-то вроде этого в файле testtt:

{It captures this! }
// question: 2572410  name: Question 2

::Question 2::[html] Is it going to be -40 tomorrow?

{
It can't
capture this!!! why?
}

когда я делаю:

grep -o '{\([^}]*\)}' testttt

Это не может получить многострочные фигурные скобки. Любая справка для изменения его способом, которым это могло получить обоих, будет цениться!

PS. Я также протестировал данное решение от: Как делают меня grep для нескольких шаблонов на нескольких строках? и это дает следующую ошибку:

grep: unescaped ^ or $ not supported with -Pz

Можно найти текстовый файл вывода и содержания файла здесь

1
задан 13 April 2017 в 15:24

2 ответа

По умолчанию, grep чтения и одни строки процессов.

В более новых версиях grep, можно использовать -z опция сказать этому полагать, что ее вход пустой разделенный вместо разделенной новой строки; так как Ваш вход не имеет пустых завершений, это чрезвычайно эквивалентно perl's, 'хлебают' режим. Таким образом, Вы могли сделать

$ grep -zPo '{[^}]*}' testttt
{It captures this! }
{
It can't
capture this!!! why?
}

или, больше perlishly, с помощью .*? нежадное соответствие с (?s) для включения новых строк в .

$ grep -zPo '(?s){.*?}' testttt
{It captures this! }
{
It can't
capture this!!! why?
}

, С другой стороны, если pcregrep доступно,

$ pcregrep -Mo '(?s){.*?}' testttt
{It captures this! }
{
It can't
capture this!!! why?
}
4
ответ дан 3 December 2019 в 06:31

Для инициирования многострочного поиска с grep, необходимо добавить немногих опция больше, так попытка:

 grep -Pzo '(?s){.*?}' testttt

Решение с хорошим объяснением может быть найдено (и украден:)) от stackoverflow.

, Если Вы имеете pcregrep, можно найти это более полезным в общем случае, поскольку это поддерживает PERL 5 regex.

2
ответ дан 3 December 2019 в 06:31

Другие вопросы по тегам:

Похожие вопросы: