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]


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.


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

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.


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
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.