Convertendo um arquivo autônomo
Se você executar o seguinte comando:
$ dos2unix <file>
O <file>
terá todos os ^ M caracteres removidos. Se você quiser deixar <file>
intacto, simplesmente execute dos2unix
da seguinte forma:
$ dos2unix -n <file> <newfile>
Analisando a saída de um comando
Se você precisar fazer isso como parte de uma cadeia de comandos por meio de um canal, poderá usar qualquer número de ferramentas, como tr
, sed
, awk
ou perl
para fazer isso. / p>
tr
$ java -jar test.jar | tr -d '^M' >> test.log
sed
$ java -jar test.jar | sed 's/^M//g' >> test.log
awk
$ java -jar test.jar | awk 'sub(/^M/,"")' >> test.log
perl
$ java -jar test.jar | perl -p -e 's/^M//g' >> test.log
Digitando ^ M
Ao inserir o ^M
, certifique-se de inseri-lo de uma das seguintes formas:
- Como Controle + v + M e não Deslocamento + 6 + M .
- Como uma barra invertida r, ou seja, (
\r
). - Como um número octal (
5
). - Como um número hexadecimal (
\x0D
).
Por que isso é necessário?
O ^M
faz parte de como o fim das linhas é finalizado na plataforma Windows. Cada fim de linha é terminado com um caractere de retorno de carro seguido por um caractere de alimentação de linha.
Em sistemas Unix, o fim da linha é finalizado apenas por um caracter de avanço de linha.
- caractere de alimentação de linha =
0x0A
em hexadecimal, também escrito como\n
. - caractere de retorno de carro =
0x0D
em hexadecimal, também escrito como\r
.
Exemplos
Você pode vê-los se canalizar a saída para uma ferramenta como od
ou hexdump
. Aqui está um arquivo de exemplo com a linha terminando os retornos de carro + os caracteres de avanço de linha.
$ cat sample.txt
hi there
bye there
Você pode vê-los com hexdump
como \r
+ \n
:
$ hexdump -c sample.txt
0000000 h i t h e r e \r \n b y e t h
0000010 e r e \r \n
0000015
Ou como seu% hexadecimal0d
+ 0a
:
$ hexdump -C sample.txt
00000000 68 69 20 74 68 65 72 65 0d 0a 62 79 65 20 74 68 |hi there..bye th|
00000010 65 72 65 0d 0a |ere..|
00000015
Executando isso por meio de sed 's/\r//g'
:
$ sed 's/\r//g' sample.txt |hexdump -C
00000000 68 69 20 74 68 65 72 65 0a 62 79 65 20 74 68 65 |hi there.bye the|
00000010 72 65 0a |re.|
00000013
Você pode ver que sed
removeu o caractere 0d
.
Exibindo arquivos com ^ M sem converter?
Sim, você pode usar vim
para fazer isso. Você pode definir a configuração fileformat
no vim, que terá o efeito de converter o arquivo como fizemos acima ou alterar o formato do arquivo na exibição vim
.
alterando o formato de um arquivo
:set fileformat=dos
:set fileformat=unix
Você também pode usar a notação abreviada:
:set ff=dos
:set ff=unix
Como alternativa, você pode apenas alterar o formato de arquivo da exibição. Esta abordagem é não destrutiva:
:e ++ff=dos
:e ++ff=unix
Aqui você pode me ver abrindo o arquivo ^M
, sample.txt
in vim
:
Agoraestouconvertendooformatodearquivonaexibição:
Veja o que parece quando convertido para o formato de arquivo unix
:
Referências
Diferentes maneiras de excluir o caractere ^ M em um arquivo - Artigo da Newline da Wikipédia