grep все символы, включая перевод строки - PullRequest
6 голосов
/ 20 февраля 2011

Я анализирую XML-файл с помощью

"lalala it's a Sunday {{ Some words here, maybe
a new line }} oh boy"

Как мне использовать grep, чтобы получить все в пределах "{{" и "}}", учитывая, что символ grep . не распознаетпереводы строки?

В настоящее время у меня есть

grep '{{.*}}'

, но он работает только с вещами, которые находятся на одной строке.

Ответы [ 4 ]

8 голосов
/ 20 февраля 2011

Один из вариантов - удалить символ новой строки и затем grep, как в:

 cat myfile | tr -d '\n' | grep {{.*}}

Но если вы говорите, что это файл XML, почему бы не использовать синтаксический анализатор XML, который использует преимущества внутренней структуры файла, а не просто регулярное выражение?

EDIT

Grep регулярные выражения жадные, вы можете использовать Perl регулярные выражения:

cat myfile | tr -d '\n' | perl -pe 's/.*?({{.*?}})/\1\n/g' | grep {{

Это должно вывести одно совпадение на строку. Если вы вложили {{тогда, это станет еще сложнее.

1 голос
/ 20 февраля 2011

Вы можете использовать чередование взаимоисключающих наборов символов, чтобы действительно соответствовать любому символу. Например, эта команда:

grep -E "\{\{([[:digit:]]|[^[:digit:]])+\}\}"

... будет совпадать (с жадностью) между первым {{ и последним }}.

Но, как утверждает @JesseCohen, вам действительно нужно анализировать XML с помощью XML-анализатора, , а не регулярных выражений .

0 голосов
/ 07 декабря 2018

Это сработало для меня:

grep -zo '[[:cntrl:][:print:]]'
0 голосов
/ 11 июня 2011

Так я решил эту проблему

   grep '{{[\s\S]*}}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...