¿Cómo se llama el carácter ^ M?

Respuestas:

53

Se conoce como retorno de carro.

Si está utilizando vim, puede ingresar al modo de inserción y escribir CTRL- v CTRL- m. Que ^ M es el teclado equivalente a \ r .

Insertar 0x0Den un editor hexadecimal hará la tarea.

¿Como remover?

Puedes eliminarlo usando el comando perl -p -i -e "s/\r//g" filename.

Como el OP sugirió en los comentarios de esta respuesta aquí , incluso puede probar ay dos2unix filenamever si eso lo soluciona.

Como @steeldriver sugiere en los comentarios, después de abrir el editor vim, presione la esctecla y escriba :set ff=unix.

Referencias

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

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

-ksh: ingresos_ext.ksh: no encontrado [No existe tal archivo o directorio]

Ramesh
fuente
3
podría valer la pena mencionar vi / vim :set ff=unixasí
steeldriver
@steeldriver, hecho :)
Ramesh
Gracias, @Ramesh. No tengo idea de cómo hacer esos códigos de teclado. Eres un buen chico
mikeserv
1
@mikeserv, use la tecla <kbd> </kbd> para usar los símbolos del teclado. :)
Ramesh
2
+1 por responder la pregunta real "cómo se llama"
andrew lorien
7

Código

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

Mientras escribe ^Mel comando, no lo use shift+6 & M. Debe utilizar ctrl+v+m.

Kashyap
fuente
1
¡Bienvenido a Unix Stackexchange! Tenga en cuenta cómo formatear el cuerpo para el código. No hay necesidad de agradecer y otros al final.
Léo Léopold Hertz 준영
1

también puedes hacer esto con sed

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

Como señala Ramesh, CTRL+ V CTRL+ Mdebería obtener el carácter literal, aunque no está limitado a hacer esto solo en vim, debe poder hacer lo mismo en cualquier modo canónico.

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

... podría hacer el trabajo.

mikeserv
fuente
1
estás leyendo y escribiendo en el mismo archivo, esto no causaría un problema
iruvar
@ 1_CR Estoy leyendo del |pipearchivo. Es cierto, un archivo tmp intermedio sería más robusto, pero el búfer en la tubería debería ser suficiente. Aún así, en caso de que no sea así, tr -d '\r' <<FILE >./file\n$(cat ./file)\nFILE\nsería algo seguro, siempre que el archivo no contenga \000caracteres, es decir.
mikeserv
Es muy probable que esto se borre ./fileantes de cattener la oportunidad de leerlo. Todos los comandos de una tubería se lanzan en paralelo y el redireccionamiento procesa las redirecciones antes de que se ejecute el comando afectado.
jlliagre
@mikeserv re la $(cat)corrección que contiene heredoc : o (significativo) líneas vacías finales o última línea sin terminar, o más datos de los que caben en la memoria disponible. (rm file; tr -d '\r' >file) <fileevita eso, si recrear el archivo está bien (restablece el propietario / grupo / permbits / ACL / context / etc)
dave_thompson_085