Como converter novas linhas em um conjunto de arquivos?

1

Eu tenho um conjunto de arquivos com novas linhas do Windows ( CRLF ) ou novas linhas do Unix ( LF ).

Como posso converter todas as novas linhas em todos os arquivos para novas linhas do Mac ( CR )?

    
por Thangaraj 16.11.2010 / 16:15

2 respostas

2

A pergunta não diz explicitamente, mas suponho que você queira dizer arquivos de texto e precise converter o formato de delimitador de linha? O OS X não vem com ferramentas de conversão de arquivos de linha de comando, você mesmo precisa construí-las. Perl é bom para utilitários de Q & D como este:

perl -pe 'if (s/\r?\n/\r/g) {$f=1}; if ($f&&eof()) {s/\r\z//}' PCfile.txt >Macfile.txt

ou, para converter no local:

perl -pe 'if (s/\r?\n/\r/g) {$f=1}; if ($f&&eof()) {s/\r\z//}' -i convertfile.txt

Nota: este script é um pouco mais complicado do que provavelmente deve ser, porque está escrito para trabalhar tanto em terminadores de linha CRLF (terminadores de linha CRLF) quanto em arquivos unix (terminadores LF), e deixar arquivos que já estão no antigo formato tradicional MacOS (separadores CR entre linhas) sozinho. Além disso, os formatos PC e unix colocam um terminador após a última linha, enquanto o formato Mac não (ele usa separadores de linha, não terminadores), então este script detecta quando está realmente traduzindo e remove o último delimitador.

    
por 16.11.2010 / 18:13
2

Os finais de linha CR foram usados principalmente no Mac OS 9 e anteriores. OS X usa finais de linha LF na maioria dos lugares.

Alguns dos métodos abaixo adicionam uma nova linha ao final dos arquivos que ainda não terminam com uma nova linha. Alguns não funcionam no Windows ou se os finais de linha padrão não são LF.

CRLF para LF:

dos2unix *.txt
sed -i '' $'s/\r//' *.txt
tr -d '\r'

LF para CRLF:

unix2dos *.txt
recode ../crlf *.txt

LF para CR:

unix2mac *.txt
awk 'BEGIN{ORS="\r"};1'
tr '\n' '\r'

CR para LF:

mac2unix *.txt
awk 'BEGIN{RS="\r"};1'

CRLF ou CR para LF:

ruby -e 'print gets(nil).gsub /\r\n?/,"\n"'
ruby -i -pe 'BEGIN{$/="\r"};$_=$_.sub("\n","").sub("\r","\n")' *

CRLF ou LF para CR:

ruby -i -ne 'print $_.chomp+"\r"' *.txt
    
por 04.06.2013 / 15:15