Substitua LF por CRLF no início de um arquivo

1

Estou escrevendo um script que percorre todos os arquivos e substitui os feeds de linha no início de cada arquivo. Para um arquivo como este,

\n
\n
A line \r\n
Another line \r\n
\r
\f
\n
\n
Few more lines \r\n
\r\n

Eu preciso substituir todos os feeds de linha no início do arquivo por CRLF, ou seja,

\r\n
\r\n
A line \r\n
Another line \r\n
\r
\f
\n
\n
Few more lines \r\n
\r\n

Eu tentei usar

sed -i 's/^[\n]/\r\n/' file.txt

Mas parece que não funciona.

Editar: eu posso substituir um intervalo de linhas com

sed '1,2s/^/\r/'

Mas existe uma maneira de identificar se o primeiro caractere no arquivo é um feed de linha?

    
por mak 12.08.2015 / 10:58

1 resposta

1

Se você tem o GNU sed, você pode usar o formulário de endereço especial 0,/./ para fazer substituições apenas na parte de um arquivo até a primeira linha não vazia. Para ilustrar:

~$ cat -e file.txt
$
$
non empty line$
non empty line$
$
$
non-empty line$
$

(os sinais $ indicam términos de linha literais: veja man cat ); então

~$ sed '0,/./ s/^$/\r/' file.txt | cat -e
^M$
^M$
non empty line$
non empty line$
$
$
non-empty line$
$

em que os caracteres ^M indicam os CRs inseridos.

    
por 12.08.2015 / 14:45

Tags