Si haces un hexdump -C badfiley ves 0x0d 0x0a"\r\n"que ese es tu problema.
Yzmir Ramirez
Respuestas:
1075
dos2unix es una utilidad de línea de comandos que hará esto, o lo :%s/^M//ghará si usa Ctrl- vCtrl- mpara ingresar ^ M, o puede :set ff=unixy vim lo hará por usted.
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.
Muchas gracias. Intenté vi + ': wq ++ ff = unix' <filepath> para una persona perezosa como yo.
a_secenthusiast
2
Esta debería ser la respuesta más votada. :w +ff=unixes mucho mejor que la mayoría de las otras cosas escritas aquí, y el script bash es una buena ventaja.
mkasberg
Los :ecomandos no parecen hacer nada en mi instalación de Windows vim. Mi vista todavía muestra los ^Mcódigos.
Grant Birchmeier
160
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 :)
Esto funciona de manera consistente en todas las plataformas. La mejor respuesta aquí.
thebigjc
44
Nunca he tenido ningún problema :set ff=unixantes, pero el archivo que abrí hoy debe haber sido particularmente extraño. Vim dijo que ya estaba fileformat=unixpero que todos los finales de línea sí ^M. Esta solución funcionó para mí.
Chris B
15
Esta solución agrega líneas adicionales no deseadas para mí, duplicando el número de líneas en el archivo. :%s/\r//gen cambio funciona para mí.
Victor Zamanian
3
Victor, tus archivos probablemente tienen \ r \ n terminaciones. la \ r no se lee como una nueva línea pero la \ n sí. En los archivos con los que me estoy encontrando son \ r y tienes que agregar un carácter de nueva línea.
Joeyjoejoejr
2
@ VictorZamanian's :%s/\r//ges 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.
Cecil Curry
97
Prefiero usar el siguiente comando:
:set fileformat=unix
También puede usar maco dospara 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:
+1 por apuntar al sitio oficial de documentación. Para cualquiera que use el enlace anterior, consulte la sección "Conversión del archivo actual" en esa página.
The Tin Man
Este + vim -b <nombre de archivo> funcionó a las
mil maravillas
10
Convierte el directorio de archivos de DOS a Unix
Usando la línea de comando y sed, busque todos los archivos en el directorio actual con la extensión ".ext" y elimine todos los "^ M"
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.
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+ VCTRL+ lo Mhizo perfectamente.
Puedes usar en :%slugar de :1,$s. %es la abreviatura 1,$.
The Tin Man
5
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.
hecho esto en un servidor Linux, el archivo tenía ^Mterminaciones. guardar como dos para mantener, guardar como linux para eliminar. puede verificar usandocat -v
HattrickNZ
Esta pregunta es sobre vim, no nano.
Grant Birchmeier
5
:g/Ctrl-v Ctrl-m/s///
CtrlMes el carácter \ro 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 \rcon nada, eliminándolos de los extremos de las líneas.
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.
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 \npermanecerá en eol.
hexdump -C badfile
y ves0x0d 0x0a
"\r\n"
que ese es tu problema.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.fuente
:%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 @Bunykset 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:
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):
Y puede usarlo desde la línea de comandos:
fuente
: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
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 :)
fuente
:set ff=unix
antes, pero el archivo que abrí hoy debe haber sido particularmente extraño. Vim dijo que ya estabafileformat=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:
También puede usar
mac
odos
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:
fuente
^M
caracteres.set fileformat=unix
a mi archivo .vimrc funcionó.:set fileformat=unix
para convertir de dos a unix.fuente
En Vim, eso elimina todos los retornos de carro y deja solo nuevas líneas.
fuente
:%s/\r//g
, funcionó a las mil maravillas.de: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
fuente
Convierte el directorio de archivos de DOS a Unix
Usando la línea de comando y sed, busque todos los archivos en el directorio actual con la extensión ".ext" y elimine todos los "^ M"
@ https://gist.github.com/sparkida/7773170
también, como se mencionó anteriormente ^ M = Ctrl+V+ Ctrl+M(no solo escriba el símbolo de intercalación "^" y M)
fuente
dos2unix
puede modificar directamente el contenido del archivo.Puede usarlo directamente en el archivo, sin necesidad de redireccionar el archivo temporalmente.
Lo anterior utiliza el supuesto teclado estadounidense. Use la
-
opción 437 para usar el teclado del Reino Unido.fuente
(ver: http://kb.iu.edu/data/acux.html )
fuente
Los siguientes pasos pueden convertir el formato de archivo para DOS a UNIX:
Referencia: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
fuente
Con el siguiente comando:
Obtener el
^M
tipo de aparecer CtrlVentonces CtrlM. CtrlVle dice a Vim que tome el siguiente personaje ingresado literalmente.fuente
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
y se veía así en mi pantalla:
fuente
:%s
lugar de:1,$s
.%
es la abreviatura1,$
.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.
fuente
^M
terminaciones. guardar como dos para mantener, guardar como linux para eliminar. puede verificar usandocat -v
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.fuente
Puedes usar:
o
dos2unix utility
.fuente
Puede usar el siguiente comando:
:%s/^V^M//g
donde '^' significa usar la CTRLtecla.
fuente
El siguiente comando se usa para reformatear todo el archivo .sh en el directorio actual, lo probé en mi sistema operativo Fedora.
fuente
En vim, escriba:
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
fuente
Para ejecutar directamente en la consola de Linux:
vim file.txt +"set ff=unix" +wq
fuente
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:
Versión GNU:
Alternativamente, puede crear la suya propia
dos2unix
con cualquiera de las respuestas propuestas aquí, por ejemplo:fuente
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
fuente
Aunque este tema es muy antiguo, me gustaría poner otras cosas de wikia:
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.fuente
Esta es mi manera. Abrí un archivo en dos EOL y cuando guardo el archivo que se convertirá automáticamente a unix EOL
fuente
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
Esto hará la magia requerida.
fuente
Quería nuevas líneas en lugar de las ^ M's. Perl al rescate:
O para escribir en stdout:
fuente