img attribute sql unix newline line-endings os-dependent

sql - attribute - Carácter ''^ M'' al final de las líneas



title html attribute (16)

Convierta las terminaciones de línea de DOS / Windows (/ r / n) a Unix (/ n) terminaciones de línea, con tr:

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

Publica sobre el reemplazo de nuevas líneas de la línea de comandos de Unix

Cuando ejecuto un script SQL particular en entornos Unix, estoy viendo un carácter ''^ M'' al final de cada línea del script SQL a medida 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?


El ^ M suele ser causado por las líneas nuevas del operador de Windows, y traducido a Unix se ve como un ^ M. El comando dos2unix debería eliminarlos muy bien

dos2unix [opciones] [-c convmode] [-o archivo ...] [-n archivo de entrada ...]


En Perl, si no desea establecer la variable $ / y usar chomp () también puede hacer:

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

Mis dos centavos


En vi, haz a :%s/^M//g

Para obtener la ^M mantenga presionada la tecla CTRL , presione V y luego M (Ambos mientras mantiene presionada la tecla de control) y aparecerá ^M Esto encontrará todas las ocurrencias y las reemplazará con nada.


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


Intenta usar dos2unix para quitar el ^ M.


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 fin de línea.

Los sistemas operativos basados ​​en Windows, gracias a su herencia de DOS, almacenan un final de línea como un par de caracteres: 0x0D0A (retorno de carro + avance de línea). Los sistemas operativos basados ​​en Unix simplemente usan 0x0A (un avance de línea ). El ^M que está viendo es una representación visual de 0x0D (un retorno de carro ).

dos2unix ayudará con esto. Probablemente también necesite ajustar la fuente de los guiones para que sea ''amigable para Unix''.


La forma más fácil es usar vi . Sé que suena terrible, pero es 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 ir al modo comando.

Buscar y reemplazar todos globalmente es :%s/^M//g " Mantenga presionado el control y luego presione V luego M ", que reemplazará ^ M sin nada.

Luego, para escribir y salir, ingrese " :wq " ¡Hecho!


La secuencia de comandos SQL se creó originalmente en un sistema operativo Windows. Los caracteres ''^ M'' son el resultado de que Windows y Unix tienen diferentes ideas sobre qué usar para un personaje de final de línea. Puedes usar Perl en la línea de comando para arreglar esto.

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


Otro comando vi que hará :%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 es el último carácter, así que tenga cuidado de no llamarlo dos veces.


Para reemplazar ^ M caracteres en el editor vi use debajo

abra el archivo de texto diga t1.txt

vi t1.txt

Ingrese al modo comando presionando shift + :

luego presione las teclas como se menciona %s/^M//r/g

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


Puede eliminar ^ M de los archivos directamente a través del comando sed, por ejemplo:

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

Si está satisfecho con los cambios, elimine los archivos .bak:

rm -v *.bak


Reparar terminaciones de línea en vi ejecutando lo siguiente:

:set fileformat=unix

:w


Una alternativa al comando dos2unix sería usar utilidades 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


od -a $file es útil para explorar esos tipos de preguntas en Linux (similar a dumphex en el ejemplo anterior).


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

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

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

También puedes probar 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.