У меня есть что-то вроде этого в файле 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
Можно найти текстовый файл вывода и содержания файла здесь
По умолчанию, 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?
}
Для инициирования многострочного поиска с grep
, необходимо добавить немногих опция больше, так попытка:
grep -Pzo '(?s){.*?}' testttt
Решение с хорошим объяснением может быть найдено (и украден:)) от stackoverflow.
, Если Вы имеете pcregrep
, можно найти это более полезным в общем случае, поскольку это поддерживает PERL 5 regex.