Como é chamado o caractere ^ M?

Respostas:

53

É conhecido como retorno de carro.

Se você estiver usando, vimpode entrar no modo de inserção e digitar CTRL- v CTRL- m. Que ^ M é o teclado equivalente a \ r .

Inserir 0x0Dem um editor hexadecimal fará a tarefa.

Como remover?

Você pode removê-lo usando o comando perl -p -i -e "s/\r//g" filename.

Como o OP sugeriu nos comentários desta resposta aqui , você pode até tentar um dos2unix filenamee ver se isso o corrige.

Como @steeldriver sugere nos comentários, depois de abrir o editor vim, pressione a esctecla e digite :set ff=unix.

Referências

https://stackoverflow.com/questions/1585449/insert-the-carriage-return-character-in-vim

https://stackoverflow.com/a/7742437/1742825

-ksh: recipes_ext.ksh: não encontrado [Esse arquivo ou diretório não existe]

Ramesh
fonte
3
pode valer a pena mencionar vi / vim :set ff=unixbem
steeldriver
@steeldriver, done :)
Ramesh
Obrigado, @Ramesh. Não faço ideia de como fazer esses códigos de teclado. Você é um cara legal.
mikeserv
1
@mikeserv, use a tecla <kbd> </kbd> para usar os símbolos do teclado. :)
Ramesh
2
+1 para responder à questão real "o que é chamado de"
andrew lorien
7

Código

sed -i 's/^M//' filename.txt

Ao digitar ^Mo comando, não use shift+6 & M. Você deveria usar ctrl+v+m.

Kashyap
fonte
1
Bem-vindo ao Unix Stackexchange! Observe como formatar o corpo para o código. Não há necessidade de agradecimentos e outros no final.
Léo Léopold Hertz,
1

você também pode fazer isso com o sed

 sed -i "s/\r//g" filename
k_vishwanath
fonte
-1

Como Ramesh observa, CTRL+ V CTRL+ Mdeve fornecer o caractere literal - embora você não esteja limitado a fazer isso apenas em vim- você deve poder fazer o mesmo em qualquer modo canônico tty.

cat ./file | tr -d '\r' >./file

... pode fazer o trabalho.

mikeserv
fonte
1
você está lendo e gravando no mesmo arquivo, isso não causaria um problema
iruvar 5/14
@ 1_CR Estou lendo o |pipearquivo. É verdade que um arquivo tmp intermediário seria mais robusto - mas o buffer no pipe deve ser suficiente. Ainda assim, caso não seja, tr -d '\r' <<FILE >./file\n$(cat ./file)\nFILE\nseria uma coisa certa - desde que o arquivo não contenha \000caracteres, ou seja.
mikeserv
Provavelmente, isso será apagado ./fileantes catque você possa lê-lo. Todos os comandos de um pipeline são iniciados em paralelo e os redirecionamentos são processados ​​pelo shell antes da execução do comando afetado.
Jlliagre
@mikeserv re: a $(cat)correção que contém o heredoc : ou (significativa) linhas vazias à direita ou última linha não terminada, ou mais dados do que a memória disponível. (rm file; tr -d '\r' >file) <fileevita aqueles, se recriar o arquivo é ok (resets dono / grupo / permbits / ACL / context / etc)
dave_thompson_085