Cuando ejecuto un script SQL en particular en entornos Unix, veo un carácter '^ M' al final de cada línea del script SQL, ya que se repite en la línea de comandos. No sé en qué sistema operativo se creó originalmente el script SQL.
¿Qué está causando esto y cómo lo soluciono?
sql
unix
newline
line-endings
os-dependent
Paul Reiners
fuente
fuente
brew install dos2unix
cuando tiene instalado HomebrewCorrija los finales de línea
vi
ejecutando lo siguiente::set fileformat=unix
:w
fuente
^M
s por alguna razón. archivo de referencia:/etc/timidity/fluidr3_gm.cfg
.La causa es la diferencia entre cómo un sistema operativo basado en Windows y un sistema operativo basado en Unix almacenan los marcadores de final de línea.
Los sistemas operativos basados en Windows, gracias a su herencia DOS, almacenan un final de línea como un par de caracteres -
0x0D0A
(retorno de carro + salto de línea). Los sistemas operativos basados en Unix solo usan0x0A
(un salto de línea ). Lo^M
que está viendo es una representación visual de0x0D
(un retorno de carro ).dos2unix le ayudará con esto. Probablemente también necesite ajustar la fuente de los scripts para que sean compatibles con Unix.
fuente
^M
? ¿Por qué el '^'? ¿Por qué la 'M'?La forma más sencilla es utilizar
vi
.Sé que suena terrible, peroes simple y ya está instalado en la mayoría de los entornos UNIX. El ^ M es una nueva línea del entorno Windows / DOS.desde el símbolo del sistema:
$ vi filename
Luego presione "
:
" para acceder al modo de comando.Buscar y reemplazar todo globalmente es
:%s/^M//g
" Mantenga presionado el control, luego presione V y luego M ", lo que reemplazará ^ M con nada.Luego, para escribir y salir ingrese "
:wq
" ¡Listo!fuente
Intente usar dos2unix para quitar el ^ M.
fuente
En vi, haz un
:%s/^M//g
Para
^M
mantener la CTRLtecla, presione y Vluego M(Ambos mientras mantiene presionada la tecla de control) y^M
aparecerá. Esto encontrará todas las ocurrencias y las reemplazará con nada.fuente
:%s/^M/\r/g
El script SQL se creó originalmente en un sistema operativo Windows. Los caracteres '^ M' son el resultado de que Windows y Unix tienen ideas diferentes sobre qué usar para un carácter de final de línea. Puede usar perl en la línea de comandos para solucionar este problema.
fuente
La ^ M generalmente es causada por las nuevas líneas del operador de Windows, y traducida a Unix parece una ^ M. El comando dos2unix debería eliminarlos muy bien
dos2unix [opciones] [-c modo conv] [-o archivo ...] [-n archivo de salida de archivo ...]
fuente
Sed está aún más disponible y puede hacer este tipo de cosas también si dos2unix no está instalado
También puedes probar tr:
Aquí están los resultados:
fuente
Para reemplazar ^ M caracteres en el editor vi, use a continuación
abre el archivo de texto, di t1.txt
Ingrese al modo de comando presionando
shift + :
luego presione las teclas como se mencionó
%s/^M/\r/g
fuente
Una alternativa al
dos2unix
comando sería usar utilidades estándar comosed
.Por ejemplo, dos a unix:
unix para hacer:
fuente
Puede eliminar ^ M de los archivos directamente a través del comando sed, por ejemplo:
Si está satisfecho con los cambios, elimine los archivos .bak:
fuente
Convierta los finales de línea de DOS / Windows (\ r \ n) a finales de línea de Unix (\ n), con tr:
Publicación sobre la sustitución de nuevas líneas desde la línea de comandos de Unix
fuente
od -a $file
es útil para explorar ese tipo de preguntas en Linux (similar a dumphex en el anterior).fuente
En Perl, si no desea establecer la variable $ / y usar chomp (), también puede hacer:
Mis dos centavos
fuente
Otro comando vi que servirá:
:%s/.$//
esto elimina el último carácter de cada línea en el archivo. El inconveniente de este comando de búsqueda y reemplazo es que no le importa cuál sea el último carácter, así que tenga cuidado de no llamarlo dos veces.fuente