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.


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

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.

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\)")

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.


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'

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


0

$ recode dos .. FILE
$ flip -u FILE

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.