Como posso fazer o grep usar o CRLF (e não o LF) como uma nova linha?

1

Eu preciso percorrer um arquivo em que não apenas linhas são terminadas por um CRLF, mas elas também podem ter vários LFs em cada linha. Como posso fazer o grep ignorar LFs a menos que haja um CR na frente deles? FYI, estou usando o OS X, então seria útil ter instruções do BSD grep.

    
por Jason Baker 02.09.2010 / 23:54

2 respostas

2

Não vejo como fazer isso usando apenas grep , mas você pode usar perl , por exemplo,

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

ou você pode usar tr como um filtro em torno de grep , por exemplo,

tr '\n\r' '
perl -e '$/="\r\n";' -ne 'print if /your_pattern/;' your_filename
\n' < your_filename | grep -a your_pattern | tr '
tr '\n\r' '%pre%\n' < your_filename | grep -a your_pattern | tr '%pre%\n' '\n\r'
\n' '\n\r'

O último pressupõe que o seu arquivo ainda não contenha nenhuma NUL.

    
por 03.09.2010 / 01:08
0

Eu acho que você precisa usar o awk.
awk tem variável RS (Records Seperator) para alterar o terminador de linha

    
por 08.02.2014 / 03:13