Converter CRLF's em feeds de linha no Linux

33

Qual é a melhor maneira de converter CRLF para feeds de linha em arquivos no Linux?

Eu vi os comandos sed , mas há algo mais simples?

    
por JoelFan 07.10.2009 / 07:06

11 respostas

39

Use este comando:

fromdos yourtextfile

O contrário:

todos yourtextfile

Esses comandos são encontrados no pacote tofrodos (nas distribuições mais recentes), que também fornece os dois wrappers unix2dos e dos2unix que imitam as antigas ferramentas unix do mesmo nome.

    
por 07.10.2009 / 11:22
24

Use dos2unix .

dos2unix - DOS/MAC to UNIX text file format converter

dos2unix  [options] [-c convmode] [-o file ...] [-n infile outfile ...]

Options:
          [-hkqV] [--help] [--keepdate] [--quiet] [--version]
    
por 07.10.2009 / 07:17
20

Eu prefiro perl :

perl -lne 's/\r//g; print' winfile.txt > unixfile.txt

Mas isso é bem adequado aos meus usos, e é muito fácil para mim lembrar. Nem todos os sistemas têm um comando dos2unix, mas a maioria dos que eu trabalho tem um interpretador perl.

Outra é recode , um poderoso substituto para dos2unix e iconv; está disponível no pacote "recode" nos repositórios da Debian:

recode ibmpc..lat1 winfile.txt   # dos2unix
recode lat1..ibmpc unixfile.txt  # unix2dos

Para fãs awk :

awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt

... e sed :

sed 's/\r$//' winfile.txt > unixfile.txt

E agora, apenas um pouco menos complicado do que excluir o CR manualmente em um editor hexadecimal, diretamente de um dos nossos amigos do stackoverflow.com , utilizável com o interpretador beef (localizado no seu repositório Debian de vizinhança amigável),

dos2unix em brainfuck !

,[[->+>+<<]>>>,[<-------------[+++++++++++++.>>>]<[>>----------[>+++++++++++++.-------------]<++++++++++>]<<<<[-]>>>[-<<<+>>>]]<[-]<[-]<]++++++++++.

grande obrigado a jk por desperdiçar uma hora de sua vida para escrever isso!

    
por 07.10.2009 / 07:44
9

Eu faço isso em Bash :

cat cr_stuffed.file | tr -d \r > no_more_crs.file
    
por 08.10.2009 / 01:31
7

Acho que você também pode usar tr (embora eu não tenha arquivos de formatação engraçados em que tentar):

tr -d '\r' < file1 > file2
    
por 11.10.2009 / 04:56
4

Eu encontrei uma maneira muito fácil ... Abra o arquivo com nano: ## nano file.txt

pressione Ctrl + O para salvar, mas antes de pressionar Enter, pressione: Alt + D para alternar entre os finais de linha DOS e Unix / Linux ou: Alt + M para alternar entre finais de linha Mac e Unix / Linux em seguida, pressione Enter para salvar e Ctrl + X para sair.

    
por 30.04.2016 / 20:17
4

No vi ou Vim :

:%s/^V^M//g
    
por 07.10.2009 / 14:24
3

Eu prefiro Vim e :set fileformat=unix . Embora não seja o mais rápido, ele me dá uma prévia. É especialmente útil no caso de um arquivo com finais mistos.

    
por 07.10.2009 / 07:39
1

CR LF to LF usando awk :

awk -v RS='\r?\n' 1
command | awk -v RS='\r?\n' 1
awk -v RS='\r?\n' 1 filename

Exemplo de uso:

echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' 1 | hexdump -C

Explicação:

-v RS='\r?\n' define variável RS ( entrada r ecord s eparator) para \r?\n , significando que a entrada é lida linha por linha separada por LF ( \n ), que pode ( ? ) ser precedido por CR ( \r ).

1 é o script que o awk executa. Um script consiste em condition { action } . Nesse caso, 1 é a condição que avalia como true. A ação é omitida, então a ação padrão é executada, o que significa imprimir a linha atual (que também pode ser escrita como {print $0} ou simplesmente {print} ).

LF to CR LF : Você pode definir a variável ORS ( o utput r ecord s eparator) para modificar as extremidades da linha da saída. Exemplo:

echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' -v ORS='\r\n' 1 | hexdump -C
    
por 06.02.2019 / 16:58
1

Se você quiser um método de GUI, tente o editor de texto Kate (outros editores de texto avançados podem ser capaz de lidar com isso também). Abra a caixa de diálogo localizar / Substituir ( Ctrl + R ) e substitua \r\n por \n . (NB: você precisará escolher "Expressão regular" no menu suspenso e desmarcar "Somente seleção" das opções.)

EDIT: Ou, se você simplesmente deseja converter para o formato Unix, use a opção de menu Tools > End of Line > Unix .

    
por 07.10.2009 / 12:13
1

Cole isso no script dos2unix.py em Python.

#!/usr/bin/env python
"""\
convert dos linefeeds (crlf) to unix (lf)
usage: dos2unix.py <input> <output>
"""
import sys

if len(sys.argv[1:]) != 2:
  sys.exit(__doc__)

content = ''
outsize = 0
with open(sys.argv[1], 'rb') as infile:
  content = infile.read()
with open(sys.argv[2], 'wb') as output:
  for line in content.splitlines():
    outsize += len(line) + 1
    output.write(line + '\n')

print("Done. Saved %s bytes." % (len(content)-outsize))

Deve funcionar em qualquer plataforma com o Python instalado. Domínio público.

    
por 31.10.2013 / 10:32