Почему grep не понимает экранирущую последовательность \n?

Рейтинг: 1Ответов: 1Опубликовано: 10.10.2014

Использую grep с флагом -P, с помощью которого grep обрабатывает регулярное выражения как PCRE. Но команда не понимает перенос строки (\n), хотя в то же время поддерживает другие экранирующие последовательности, например, такие как: \s (правда, она видит его как пробел только), \w, \d. Можно ли как-то заставить grep понимать \n?

Ответы

▲ 2

grep работает построчно. По умолчанию строки разделяются новой строкой '\n'.

В качестве хака, можно заставить grep воспринимать весь текстовый файл как одну большую строчку, если передать флаг -z (данные заканчиваются нулевым байтом вместо новой строки ('\n')), например,

$ grep -Pzo '(?sm)multiline pattern'

Не все версии grep поддерживают -z флаг.