Si abro los archivos que creé en Windows, todas las líneas terminan en ^M
.
¿Cómo elimino todos estos caracteres a la vez?
Si abro los archivos que creé en Windows, todas las líneas terminan en ^M
.
¿Cómo elimino todos estos caracteres a la vez?
Respuestas:
dos2unix es una utilidad de línea de comandos que hará esto, o lo :%s/^M//g
hará si usa Ctrl- v Ctrl- mpara ingresar ^ M, o puede :set ff=unix
y vim lo hará por usted.
Los documentos sobre la configuración de 'formato de archivo' están aquí , y el wiki de vim tiene una página completa sobre conversiones de finalización de línea .
Alternativamente, si mueve archivos de un lado a otro, es posible que no desee convertirlos, sino más bien hacerlo :set ff=dos
, por lo que vim sabrá que es un archivo de DOS y usará convenciones de DOS para los finales de línea.
:%s/^M//g
debería serlo :%s/\r//g
, porque ^M
solo significa "M mayúscula" al principio de la línea ".
:%s/\r//g
funcionó para mí, saludos @Bunyk
set ff=unix
no hace nada. Tal vez convierte el archivo, pero todos los ^M
personajes siguen ahí.
Cambie las terminaciones de línea en la vista:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Esto también se puede usar como operación de guardado (: solo w no guardará usando las terminaciones de línea que ve en la pantalla):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
Y puede usarlo desde la línea de comandos:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
:w +ff=unix
es mucho mejor que la mayoría de las otras cosas escritas aquí, y el script bash es una buena ventaja.
:e
comandos no parecen hacer nada en mi instalación de Windows vim. Mi vista todavía muestra los ^M
códigos.
Yo suelo usar
:%s/\r/\r/g
lo que parece un poco extraño, pero funciona debido a la forma en que vim coincide con los avances de línea. También me resulta más fácil recordar :)
:set ff=unix
antes, pero el archivo que abrí hoy debe haber sido particularmente extraño. Vim dijo que ya estaba fileformat=unix
pero que todos los finales de línea sí ^M
. Esta solución funcionó para mí.
:%s/\r//g
en cambio funciona para mí.
:%s/\r//g
es la única solución de uso general, especialmente para archivos de modo mixto que contienen una mezcla heterogénea de líneas nuevas de estilo DOS y UNIX. Las soluciones canónicas (por ejemplo, :set ff=unix
, :e ++ff=unix
) asumen cada línea de los extremos del búfer actual en el mismo estilo de nueva línea. A veces lo hacen; a veces no lo hacen. Cue sadface.
Prefiero usar el siguiente comando:
:set fileformat=unix
También puede usar mac
o dos
para convertir su archivo a macintosh o convención de archivos MS-DOS / MS-Windows respectivamente. Y no hace nada si el archivo ya está en el formato correcto.
Para obtener más información, consulte la ayuda de vim:
:help fileformat
^M
caracteres.
set fileformat=unix
a mi archivo .vimrc funcionó.
:set fileformat=unix
para convertir de dos a unix.
de: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
@ https://gist.github.com/sparkida/7773170
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
también, como se mencionó anteriormente ^ M = Ctrl+V+ Ctrl+M(no solo escriba el símbolo de intercalación "^" y M)
dos2unix
puede modificar directamente el contenido del archivo.
Puede usarlo directamente en el archivo, sin necesidad de redireccionar el archivo temporalmente.
dos2unix input.txt input.txt
Lo anterior utiliza el supuesto teclado estadounidense. Use la -
opción 437 para usar el teclado del Reino Unido.
dos2unix -437 input.txt input.txt
tr -d '\15\32' < winfile.txt > unixfile.txt
(ver: http://kb.iu.edu/data/acux.html )
Los siguientes pasos pueden convertir el formato de archivo para DOS a UNIX:
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]
:w Write buffer using unix (LF-only) line endings.
Referencia: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
El comentario sobre cómo hacer que aparezca la ^ M es lo que funcionó para mí. Simplemente escribiendo "^ M" en mi vi no tengo nada (no encontrado). Sin embargo, la secuencia CTRL+ V CTRL+ lo Mhizo perfectamente.
Mi comando de sustitución de trabajo fue
:%s/Ctrl-V Ctrl-M/\r/g
y se veía así en mi pantalla:
:%s/^M/\r/g
:%s
lugar de :1,$s
. %
es la abreviatura 1,$
.
Encontré una manera muy fácil: abrir el archivo con nano: nano file.txt
Presione CTRL+ Opara guardar, pero antes de presionar Enter, presione: ALT+ Dpara alternar entre las terminaciones de línea de DOS y Unix / Linux, o: ALT+ Mpara alternar entre las terminaciones de línea de Mac y Unix / Linux, luego presione Enterpara guardar y CTRL+ Xpara salir.
^M
terminaciones. guardar como dos para mantener, guardar como linux para eliminar. puede verificar usandocat -v
:g/Ctrl-v Ctrl-m/s///
CtrlMes el carácter \r
o retorno de carro que agregan las terminaciones de línea de DOS. CtrlVle dice a vim que inserte un CtrlMcarácter literal en la línea de comando.
En su conjunto, este comando reemplaza todo \r
con nada, eliminándolos de los extremos de las líneas.
Puedes usar:
vim somefile.txt +"%s/\r/\r/g" +wq
o dos2unix utility
.
En vim, escriba:
:w !dos2unix %
Esto canalizará el contenido de su búfer actual al comando dos2unix y escribirá los resultados sobre el contenido actual. Vim le pedirá que vuelva a cargar el archivo después de
Por lo general hay un dos2unix
comando que puede usar para esto, solo asegúrese de leer el manual ya que las versiones de GNU y BSD difieren en la forma en que manejan los argumentos.
Versión BSD:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
Versión GNU:
dos2unix $FILENAME
Alternativamente, puede crear la suya propia dos2unix
con cualquiera de las respuestas propuestas aquí, por ejemplo:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
Sabía que había visto esto en alguna parte. Aquí está el consejo de inicio de sesión de FreeBSD:
¿Necesita eliminar todos esos caracteres ^ M de un archivo DOS? Tratar
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
Aunque este tema es muy antiguo, me gustaría poner otras cosas de wikia:
%s/\r\+$//g
ese relleno encuentra todos los signos de retorno de carro (una y más repeticiones) hasta el final de la línea y borra, por lo que solo \n
permanecerá en eol.
Esta es mi manera. Abrí un archivo en dos EOL y cuando guardo el archivo que se convertirá automáticamente a unix EOL
autocmd BufWrite * :set ff=unix
Si crea un archivo en NotePad o NotePad ++ en Windows y lo trae a Linux y lo abre por vim, verá ^ M al final de cada línea. Para eliminar esto,
En su terminal de Linux, escriba
dos2unix filename.ext
Esto hará la magia requerida.
Quería nuevas líneas en lugar de las ^ M's. Perl al rescate:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
O para escribir en stdout:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
hexdump -C badfile
y ves0x0d 0x0a
"\r\n"
que ese es tu problema.