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

1884
Jason Baker

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

1

2 ответа на вопрос

2
garyjohn

Я не вижу способа сделать это, используя только 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.

0
mug896

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