Pregunta

Al ejecutar una determinada secuencia de comandos SQL en entornos Unix, estoy estoy viendo un '^M' carácter al final de cada línea de la secuencia de comandos SQL como se muestra en la línea de comandos.No sé en qué OS, la secuencia de comandos SQL que fue creado originalmente.

Cuál es la causa de esto y cómo puedo solucionarlo?

¿Fue útil?

Solución

Es causada por los DOS/Windows de línea de caracteres de final.Como Andy Whitfield dijo, el comando Unix dos2unix ayudará a solucionar el problema.Si desea más información, puede leer las páginas man para ese comando.

Otros consejos

Revisión finales de línea vi ejecutando el siguiente:

:set fileformat=unix

:w

La causa es la diferencia entre cómo un sistema operativo basado y un sistema operativo basado en Unix almacenar el final de la línea de marcadores.

Sistemas operativos basados en Windows, gracias a sus DOS del patrimonio, de la tienda de final de línea como un par de personajes - 0x0D0A (retorno de carro + salto de línea).Sistemas operativos basados en Unix solo uso 0x0A (un avance de línea).El ^M usted está viendo es una representación visual de 0x0D (un retorno de carro).

dos2unix ayudará con esto.Usted probablemente también necesite ajustar la fuente de secuencias de comandos Unix-friendly'.

La forma más fácil es usar vi. Sé que suena terrible, pero su simple y ya está instalado en la mayoría de los entornos UNIX.El ^M es una nueva línea de Windows/DOS medio ambiente.

desde el símbolo del sistema: $ vi filename

A continuación, pulse ":"para llegar al modo de comandos.

Buscar y Reemplazar todo el mundo es :%s/^M//g "Pulse y mantenga pulsada la tecla control, a continuación, pulse V entonces M"que reemplazará ^M con nada.

A continuación, escribir y dejar entrar ":wq"¡Hecho!

Trate de usar dos2unix a la franja de la ^M.

En vi, hacer un :%s/^M//g

Para obtener el ^M mantenga la CTRL tecla, pulse V entonces M (Ambos mientras se mantiene la tecla control) y el ^M aparecerá.Esta va a encontrar todas las apariciones y reemplazar con nada.

La secuencia de comandos SQL fue originalmente creado en un sistema operativo Windows.El '^M' personajes son un resultado de Windows y Unix tener diferentes ideas acerca de qué usar para un fin-de-línea de caracteres.Usted puede utilizar perl en la línea de comandos para solucionar este problema.

perl -pie 's/\r//g' filename.txt

El ^M es normalmente causado por el Windows operador de saltos de línea, y traducido en Unix se ve como un ^M.El comando dos2unix debe quitar muy bien

dos2unix [opciones] [-c convmode] [-o archivo ...] [-n infile outfile ...]

C:\tmp\text>dos2unix hello.txt helloUNIX.txt

Sed es aún más ampliamente disponible y se puede hacer este tipo de cosas también si dos2unix no está instalado

C:\tmp\text>sed s/\r// hello.txt > helloUNIX.txt  

También se podría tratar de tr:

cat hello.txt | tr -d \r > helloUNIX2.txt  

Aquí están los resultados:

C:\tmp\text>dumphex hello.txt  
00000000h: 48 61 68 61 0D 0A 68 61 68 61 0D 0A 68 61 68 61 Haha..haha..haha  
00000010h: 0D 0A 0D 0A 68 61 68 61 0D 0A                   ....haha..  

C:\tmp\text>dumphex helloUNIX.txt  
00000000h: 48 61 68 61 0A 68 61 68 61 0A 68 61 68 61 0A 0A Haha.haha.haha..  
00000010h: 68 61 68 61 0A                                  haha.  

C:\tmp\text>dumphex helloUNIX2.txt  
00000000h: 48 61 68 61 0A 68 61 68 61 0A 68 61 68 61 0A 0A Haha.haha.haha..  
00000010h: 68 61 68 61 0A                                  haha.  

Para reemplazar ^M caracteres en el editor vi utilizar a continuación

abra el archivo de texto dicen t1.txt

vi t1.txt

Entrar en el modo de comandos pulsando shift + :

a continuación, pulse las teclas como se mencionó %s/^M/\r/g

in above ^M is not (shift + 6)M instead it is (ctrl + V)(ctrl + M)

Una alternativa a la dos2unix comando sería el uso de los servicios estándar como sed.

Por ejemplo, dos a unix:

sed 's/\r$//' dos.txt > unix.txt

unix a dos:

sed 's/$/\r/' unix.txt > dos.txt

Usted puede quitar ^M a partir de los archivos directamente a través del comando sed, por ejemplo:

sed -i'.bak' s/\r//g *.*

Si usted está contento con los cambios, quitar el .bak archivos:

rm -v *.bak

Convertir DOS/Windows ( ) los finales de línea de Unix ( ) los finales de línea, con tr:

tr '\r\n' '\n' < dosFile.txt > unixFile.txt

Post sobre la sustitución de nuevas líneas desde la línea de comandos de Unix

od -a $file es útil para explorar los tipos de pregunta en Linux (similar a dumphex en la de arriba).

En Perl, si usted no desea establecer el $/ variable y el uso de chomp() también se puede hacer:

$var =~ /\r\n//g;

Mis dos centavos

Otra vi comando que vamos a hacer: :%s/.$// Esto elimina el último carácter de cada línea en el archivo.El inconveniente de esta búsqueda y sustitución de comandos es que no importa lo que el último carácter es, así que tenga cuidado de no llamar dos veces.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top