Existe um comando Bash para converter \ r \ n em \ n?

19

Existe um comando Bash para converter \ r \ n em \ n?

Quando carrego meus scripts do Windows para o Linux, preciso de um utilitário como este para fazer as coisas funcionarem.

user25321
fonte
7
dos2unixnormalmente está disponível, caso contráriosed -e 's/\r$//'
falstro
1
Não, não há comando Bash para isso, mas existe dos2unixum programa Unix / Linux para fazer o que você deseja.
Pausado até novo aviso.
1
Por que você não usa apenas um editor de texto sensato que permite escolher o estilo de nova linha ao salvar arquivos?
vtest

Respostas:

28

Há sim:

dos2unix
RaYell
fonte
Esta é a resposta historicamente correta, embora o dos2unix nem sempre esteja disponível atualmente.
Jared
5

O Translate ( tr ) está disponível em todos os Unixes:

tr -d '\r'  # From \r\n line end (DOS/Windows), the \r will be removed so \n line end (Unix) remains.
Peter Mortensen
fonte
1
Tem um efeito colateral de remover qualquer outro \rtambém. Eles são altamente incomuns.
ivan_pozdeev
5

Com sed e encontre esse final com .txt, .php, .js, .css:

 sed -rie 's/\r\n/\n/' \
 $(find . -type f -iregex ".*\.\(txt\|php\|js\|css\)")
fitorec
fonte
5

Existe um utilitário Unix chamado convque pode converter as terminações de linha. É frequentemente chamado com links flexíveis para u2dou d2uou unix2dosou dos2unix.

Além disso, existem utilitários chamados fromdose todos.

Steven Penny
fonte
2

Usando man 1 ed (que edita arquivos no local sem nenhum backup anterior - diferente de: sed .. -i ".bak" ...):

ed -s file <<< $'H\ng/\r*$/s///\nwq'

fonte
I diden't sequer sabem ed, mas ele faz o trabalho (de idade, mas o ouro)
Dwana
Este comando funcionou para mim quando não existiam comandos de outras respostas na hospedagem compartilhada que estou usando. Obrigado :)
FKasa
2

Fazer isso com o POSIX é complicado:

  • O POSIX Sed não suporta \rou \15. Mesmo se tiver, a opção no local -inão é POSIX

  • O POSIX Awk suporta \re \15, no entanto, a -i inplaceopção não é POSIX

  • O d2u e o dos2unix não são utilitários POSIX , mas ex é

  • POSIX ex não suporta \r, \15, \nou\12

Para remover retornos de carro:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

Para adicionar retornos de carro:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
Steven Penny
fonte
0

Sim, use dos2unix. Por exemplo:

[justin@mybox ~]$ dos2unix myfile
Justin Ethier
fonte
0

$ recode dos .. FILE
$ flip -u FILE

(Cada um também existe para sistemas não-Ubuntu, mas esses links são úteis.)


fonte