Как я могу заставить grep использовать CRLF (а не LF) в качестве новой строки?

Мне нужно выполнить поиск в файле, где строки не только заканчиваются CRLF, но и могут содержать несколько LF в каждой строке. Как я могу заставить grep игнорировать LF, если перед ними нет CR? К вашему сведению, я использую OS X, поэтому было бы полезно иметь инструкции BSD grep.

2 ответа

Я не вижу способа сделать это, используя только grep, но вы могли бы использовать perlнапример,

perl -e '$/="\r\n";' -ne 'print if /your_pattern/;' your_filename

или вы могли бы использовать tr как фильтр вокруг grepнапример,

tr '\n\r' '\0\n' < your_filename | grep -a your_pattern | tr '\0\n' '\n\r'

Последний предполагает, что ваш файл еще не содержит NUL.

Я думаю, что вы должны использовать вместо этого awk.
В awk есть переменная RS (Records Seperator) для изменения ограничителя строки

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