Qual é a maneira mais simples de remover todos os retornos de carro \r
de um arquivo no Unix?
unix
carriage-return
Aldur
fonte
fonte
Respostas:
Eu estou indo supor que você retornos de carro médios ( CR,
"\r"
,0x0d
) nas extremidades das linhas, em vez de apenas cega dentro de um arquivo (você pode tê-los no meio de cordas pelo que sei). Usando este arquivo de teste com a apenas CRno final da primeira linha:dos2unix
é o caminho a percorrer se estiver instalado no seu sistema:Se, por algum motivo,
dos2unix
não estiver disponível para você,sed
faça-o:Se, por algum motivo,
sed
não estiver disponível, você oed
fará de maneira complicada:Se você não tiver nenhuma dessas ferramentas instaladas na sua caixa, terá problemas maiores do que tentar converter arquivos :-)
fonte
\r
só funciona com GNU sed, outra coisa que você pode fazer isso:sed `echo "s/\r//"`
sed
nemecho
reconhecer\r
no MacOS. Nesse caso, apenasprintf "\r"
parece funcionar.sed "s/$(printf '\r')\$//"
$
assim:sed $'s@\r@@g' |od -c
(mas se você poderia substituir com\n
você precisaria para escapar dele)CTRL-V + CTRL-M
no lugar de\r
aparência pode funcionar.Veja tr (1)
fonte
tr
não suportar a\r
fuga, tente'\015'
ou talvez um literal'^M'
(em muitos shells em muitos terminais, ctrl-V ctrl-M produzirá um caractere literal de ctrl-M).outfile = infile
?someProg <in >out && mv out in
.Moda antiga:
fonte
A maneira mais simples no Linux é, na minha humilde opinião,
As aspas fortes em torno do operador de substituição
's/\r//'
são essenciais . Sem eles, o shell interpretará\r
como escape + r e o reduzirá a uma planícier
e removerá todas as letras minúsculasr
. É por isso que a resposta dada acima em 2009 por Rob não funciona.E adicionar o
/g
modificador garante que mesmo vários\r
sejam removidos, e não apenas o primeiro.fonte
Existe um utilitário chamado dos2unix que existe em muitos sistemas e pode ser facilmente instalado na maioria.
fonte
sed -i s/\r// <filename>
ou algo assim; verman sed
ou a riqueza de informações disponíveis na web sobre o uso desed
.Uma coisa a salientar é o significado preciso de "retorno de carro" acima; se você realmente quer dizer o caractere de controle único "retorno de carro", o padrão acima está correto. Se você quis dizer, de maneira geral, CRLF (retorno de carro e um avanço de linha, que é como os feeds de linha são implementados no Windows), provavelmente você deseja substituir
\r\n
. Os feeds de linha simples (nova linha) no Linux / Unix são\n
.fonte
s/\r//
não parece remover retornos de carro no OS X, mas sim removerr
caracteres literais . Ainda não sei por que isso acontece. Talvez tenha algo a ver com a maneira como a string é citada? Como solução alternativa, usarCTRL-V + CTRL-M
no lugar de\r
parece funcionar.Se você é um usuário do Vi, pode abrir o arquivo e remover o retorno de carro com:
ou com
Observe que você deve digitar ^ M pressionando ctrl-v e, em seguida, ctrl-m.
fonte
^M
-s. Para contornar isso, há uma tonelada de pressionamentos de tecla, que não é para isso que o vim é feito;). Eu apenas iriased -i
, e depois `-e 's / \ r $ // g' para limitar a remoção aos CRs na EOL.Mais uma vez uma solução ... Porque sempre há mais uma:
É legal porque está no lugar e funciona em todos os tipos de unix / linux com os quais trabalhei.
fonte
Alguém mais recomenda
dos2unix
e eu recomendo fortemente também. Estou apenas fornecendo mais detalhes.Se instalado, pule para a próxima etapa. Se ainda não estiver instalado, eu recomendaria instalá-lo via
yum
:Então você pode usá-lo como:
fonte
Se você estiver usando um sistema operacional (como o OS X) que não possui o
dos2unix
comando, mas possui um intérprete Python (versão 2.5+), esse comando é equivalente aodos2unix
comando:Isso lida com os arquivos nomeados na linha de comando, bem como com os pipes e redirecionamentos, assim como
dos2unix
. Se você adicionar esta linha ao seu arquivo ~ / .bashrc (ou arquivo de perfil equivalente para outros shells):... na próxima vez que você fizer login (ou executar
source ~/.bashrc
na sessão atual), poderá usar odos2unix
nome na linha de comando da mesma maneira que nos outros exemplos.fonte
É o seguinte,
%0d
é o caractere de retorno de carro. Para torná-lo compilável com o Unix. Precisamos usar o comando abaixo.dos2unix fileName.extension fileName.extension
fonte
tente fazer isso para converter o arquivo dos em arquivo unix:
fonte
Para UNIX ... notei que os cabeçalhos Unicode removidos dos2unix formam meu arquivo UTF-8. No git bash (Windows), o script a seguir parece funcionar bem. Ele usa sed. Observe que ele remove apenas retornos de carro no final das linhas e preserva os cabeçalhos Unicode.
fonte
Se você estiver executando um ambiente X e tiver um editor adequado (código do visual studio), seguiria a recomendação:
Código do Visual Studio: Como mostrar finais de linha
Basta ir ao canto inferior direito da tela, o código do visual studio mostrará a codificação do arquivo e a convenção de fim de linha seguida pelo arquivo. Com um simples clique, você poderá alternar.
Basta usar o código visual como substituto do bloco de notas ++ em um ambiente linux e você estará pronto.
fonte
Notepad++
o comando 'sEdit / EOL Conversion / Unix (LF)
no seu sistema Windows antes de copiar o arquivo para o seu sistema Linux.Removendo
\r
em qualquer sistema UNIX®:A maioria das soluções existentes nesta pergunta é específica do GNU e não funcionaria no OS X ou BSD; as soluções abaixo deve funcionar em muitos outros sistemas UNIX, e em qualquer shell, a partir
tcsh
desh
, ainda assim também funcionam no GNU / Linux.Testado no OS X, OpenBSD e NetBSD no
tcsh
Debian GNU / Linux nobash
.Com
sed
:No
tcsh
OS X, o seguintesed
trecho pode ser usado junto comprintf
, comosed
nemecho
manipula\r
da maneira especial como o GNU:Com
tr
:Outra opção é
tr
:Diferença entre
sed
etr
:Parece que
tr
preserva a falta de uma nova linha final do arquivo de entrada, enquantosed
no OS X e NetBSD (mas não no OpenBSD ou GNU / Linux) insere uma nova linha final no final do arquivo, mesmo se houver alguma falta na entrada. à direita\r
ou\n
no final do arquivo.Teste:
Aqui estão alguns exemplos de testes que podem ser usados para garantir que isso funcione no seu sistema, usando
printf
ehexdump -C
; Como alternativa,od -c
também pode ser usado se seu sistema estiver ausentehexdump
:fonte
Eu usei python para isso, aqui meu código;
fonte
Embora seja um post antigo, recentemente me deparei com o mesmo problema. Como eu tinha todos os arquivos para renomear dentro de / tmp / blah_dir /, já que cada arquivo neste diretório tinha "/ r" caractere à direita (mostrando "?" No final do arquivo), então fazê-lo de maneira de script era apenas o que eu conseguia pensar.
Eu queria salvar o arquivo final com o mesmo nome (sem deixar nenhum caractere). Com sed, o problema era o nome do arquivo de saída que eu precisava mencionar outra coisa (que eu não queria).
Tentei outras opções, conforme sugerido aqui (não considerado dos2unix devido a algumas limitações), mas não funcionou.
Eu tentei com "awk" finalmente, que funcionava onde eu usava "\ r" como delimitador e fiz a primeira parte :
truque é:
Abaixo do snippet de script que usei (onde todos os arquivos tinham "\ r" como caractere à direita no caminho / tmp / blah_dir /) para corrigir meu problema:
Nota: Este exemplo não é muito exato, porém próximo ao que eu trabalhei (mencionando aqui apenas para ter uma idéia melhor do que eu fiz)
fonte
Eu fiz esse shell-script para remover o caractere \ r. Funciona em solaris e red hat:
fonte
você pode simplesmente fazer isso:
fonte
a * b
...