Existe uma maneira de identificar rapidamente arquivos com terminação de linha do Windows ou Unix?

8

Sei que podemos usar dos2unix para converter entre a terminação da linha Windows e Unix. Eu estou querendo saber se existe algum comando que pode me dizer se um arquivo tem Windows ou Unix terminação de linha?

    
por Oliver 10.08.2012 / 20:41

3 respostas

11
$ file f1 f2 f3
f1: ASCII text, with CRLF, LF line terminators
f2: ASCII text, with CRLF line terminators
f3: ASCII text

Se achar necessário verificar todas as linhas do arquivo, você pode fazer isso:

$ grep -c "^M" f1 f2
f1:0
f2:3

$ wc -l f1 f2
 3 f1
 3 f2
 6 total

O "^ M" foi inserido usando Ctrl + V Ctrl + M e é o caractere de retorno de carro ASCII (CR).

Aqui vemos que o arquivo f1 tem três linhas, mas não contém CRs, então todos os finais de linha devem ser LFs de estilo Unix.

O arquivo f2 tem números iguais de linhas e CRs, portanto, é razoável supor que ele usa as terminações de linha CR, LF usadas pelo MSDOS e pelo Windows.

    
por 10.08.2012 / 20:53
1

No Windows, uma maneira rápida de informar é abrir o arquivo no Bloco de Notas. O bloco de notas mostrará quebras de linha apenas em terminações de estilo do Windows (CR + LF) e não em terminações de unix (LF). Então o seu texto unix ficará assim:

Line1Line2Line3Line4

ao passo que o texto do Windows ficará assim:

line1
line2
line3
line4

Eu não estou muito familiarizado com a plataforma unix / linux, mas tenho certeza que você pode usar hacks similares com programas como gedit ou emacs.

    
por 11.08.2012 / 20:51
0
c=($(perl -0777ne 'print $_ =~ tr/\n//; print " "; 
                   print $_ =~ tr/\r//;'))
if   ((!(c[0] +   c[1]))) ;then echo no line endings  
elif ((  c[0] && !c[1] )) ;then echo LF
elif (( !c[0] &&  c[1] )) ;then echo CR 
elif ((  c[0] ==  c[1] )) ;then echo CRLF 
else echo "anbigious LF ${c[0]} CR ${c[1]}"
fi

Note que, para a velocidade, apenas \r s e \n s individuais são contados, mas seria um arquivo bem grande que tivesse um número igual de ambos os tipos e ainda não fosse um arquivo CRLF do Windows. .

Observe também que a ferramenta * nix file não faz um scane completo do arquivo, enquanto o script perl faz. Você não mencionou em qual plataforma deseja que ele seja executado; Eu usei o script bash para testar a saída do perl, mas isso pode ser alterado para o script Window cmd .

Você pode simplesmente enviar seu arquivo para ele.

    
por 10.08.2012 / 22:53

Tags