linux - lineas - salir del editor vi
Convertir los finales de línea de DOS a finales de línea de Linux en vim (26)
Si abro archivos que creé en Windows, todas las líneas terminan con ^M
¿Cómo elimino todos estos caracteres a la vez?
Convertir el directorio de archivos de DOS a Unix.
Usando la línea de comandos 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
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 caret y M)
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.
Cambia las líneas en la vista:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Esto también se puede usar como operación de guardado (: w solo no se guardará usando las líneas que ve en la pantalla):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
Y puedes usarlo desde la línea de comandos:
for file in $(ls *cpp)
do
vi +'':w ++ff=unix'' +'':q'' ${file}
done
Con el siguiente comando:
:%s/^M$//g
Haz que aparezca ^M
para que aparezca Ctrl V y luego Ctrl M. Ctrl V le dice a Vim que tome el siguiente carácter ingresado literalmente.
El comentario sobre la aparición de ^ 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 + M lo hizo perfectamente.
Mi comando de sustitución de trabajo era
:1,$s/Ctrl-V Ctrl-M//r/g
y se veía así en mi pantalla:
:1,$s/^M//r/g
El siguiente comando se usa para reformatear todo el archivo .sh en el directorio actual, lo probé en mi sistema operativo Fedora.
for file in *.sh; do awk ''{ sub("/r$", ""); print }'' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
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
Encontré una manera muy fácil: abra el archivo con nano: nano file.txt
Presione CTRL + O para guardar, pero antes de presionar Entrar , presione: ALT + D para alternar entre los finales de línea de DOS y Unix / Linux, o: ALT + M para alternar entre los finales de línea de Mac y Unix / Linux luego presione Entrar para guardar y CTRL + X para salir.
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
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
Normalmente uso
:%s//r//r/g
lo que parece un poco extraño, pero funciona debido a la forma en que vim coincide con los saltos de línea. También me resulta más fácil de recordar :)
Para ejecutar directamente en la consola de Linux: vim file.txt +"set ff=unix" +wq
Por lo general, hay un comando dos2unix
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 su propio dos2unix
con cualquiera de las respuestas propuestas aquí, por ejemplo:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo '':set ff=unix'';
echo '':wq'';
} | vim "${1}";
}
Prefiero usar el siguiente comando:
:set fileformat=unix
También puede usar mac
o dos
para convertir respectivamente su archivo a macintosh o convención de archivos MS-DOS / MS-Windows. Y no hace nada si el archivo ya está en el formato correcto.
Para más información, vea la ayuda de vim:
:help fileformat
Puedes usar el siguiente comando:
:%s/^V^M//g
donde ''^'' significa usar la tecla CTRL .
Puedes usar:
vim somefile.txt +"%s//r//r/g" +wq
o la dos2unix utility
.
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 escribir a stdout:
perl -p -e ''s//x0d//n/g'' < excel_created.txt
Sabía que había visto esto en alguna parte. Aquí está el consejo de inicio de sesión de FreeBSD:
¿Necesitas eliminar todos esos caracteres ^ M de un archivo DOS? Tratar
tr -d //r < dosfile > newfile
-- Originally by Dru <[email protected]>
Si crea un archivo en NotePad o NotePad ++ en Windows, lo lleva 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 nombre_archivo.ext
Esto hará la magia requerida.
de: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / / r $ //
dos2unix es una utilidad de línea de comandos que hará esto, o :%s/^M//g
si usas Ctrl - v Ctrl - m para ingresar ^ M, o puedes :set ff=unix
y vim lo hará por tú.
Los documentos sobre la configuración de ''formato de archivo'' están here , y la wiki vim tiene una página completa en las conversiones de final de línea .
Alternativamente, si mueve muchos archivos de un lado a otro, es posible que no desee convertirlos, sino más bien hacer :set ff=dos
, para que vim sepa que es un archivo DOS y use las convenciones de DOS para los finales de línea.
:set fileformat=unix
para convertir de dos a unix.
dos2unix
puede modificar directamente el contenido del archivo.
Puede utilizarlo directamente en el archivo, sin necesidad de redireccionar temporalmente el archivo.
dos2unix input.txt input.txt
Lo anterior usa el supuesto teclado estadounidense. Use la opción -
437 para usar el teclado del Reino Unido.
dos2unix -437 input.txt input.txt
:%s//r+//g
En Vim, eso elimina todos los retornos de carro y solo deja nuevas líneas.
:g/Ctrl-v Ctrl-m/s///
Ctrl M es el carácter /r
, o el retorno de carro, que agregan los finales de línea de DOS. Ctrl V le dice a vim que inserte un carácter literal Ctrl M en la línea de comando.
En conjunto, este comando reemplaza a todos con nada, eliminándolos de los extremos de las líneas.
tr -d ''/15/32'' < winfile.txt > unixfile.txt
(ver: http://kb.iu.edu/data/acux.html )