Pergunta

Quando eu executar um determinado script SQL em ambientes Unix, estou estou vendo uma '^M' personagem no final de cada linha do script SQL como ele é enviado para a linha de comando.Eu não sei em qual sistema operacional o script SQL que foi originalmente criado.

O que está causando isso e como faço para corrigir isso?

Foi útil?

Solução

Ela é causada pelo DOS/Windows linha de caracteres de final.Como Andy Whitfield disse, Unix, o comando dos2unix vai ajudar a resolver o problema.Se você desejar mais informações, você pode ler as páginas de manual para o comando.

Outras dicas

Correcção terminações de linha em vi executando o seguinte:

:set fileformat=unix

:w

A causa é a diferença entre um baseado no Windows com base SO e um Unix com OS armazenar o fim-de-linha de marcadores.

Sistemas operacionais baseados no Windows, graças à DOS herança, armazenamento de um fim-de-linha, como um par de caracteres - 0x0D0A (+retorno de carro e avanço de linha).Sistemas operacionais baseados em Unix é só usar 0x0A (um alimentação de linha).O ^M você está vendo é uma representação visual de 0x0D (um retorno de carro).

dos2unix vai ajudar com isso.Você provavelmente também precisará ajustar a fonte dos scripts para ser "Unix-friendly".

A maneira mais fácil é usar vi. Eu sei que soa terrível, mas a sua simples e já está instalado na maioria dos ambientes UNIX.O ^M é uma nova linha a partir do Windows/DOS meio-ambiente.

a partir do prompt de comando: $ vi filename

Em seguida, pressione ":"para chegar ao modo de comando.

Procurar e Substituir tudo no mundo é :%s/^M//g "Pressione e mantenha pressionada a tecla control, em seguida, prima V, em seguida, M"que substituirá ^M com nada.

Em seguida, a escrever e sair enter ":wq"Feito!

Tente usar dos2unix tira o ^M.

No vi, fazer um :%s/^M//g

Para obter o ^M mantenha o CTRL tecla, pressione V em seguida, M (Os dois ao mesmo tempo mantendo a tecla control) e o ^M irá aparecer.Isto irá encontrar todas as ocorrências e substituí-los com nada.

O script SQL foi criado originalmente em um sistema operacional Windows.O '^M' personagens são um resultado do Windows e do Unix ter idéias diferentes sobre o que usar para um fim-de-linha de caracteres.Você pode usar o perl de linha de comando para corrigir isso.

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

O ^M é normalmente causada pelo operador Windows quebras de linha, e traduzido para Unix parece um ^M.O comando dos2unix deve removê-los muito bem

dos2unix [opções] [-c convmode] [-o arquivo ...] [-n infile outfile ...]

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

O Sed é ainda mais amplamente disponível e pode fazer esse tipo de coisa também se dos2unix não está instalado

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

Você também pode tentar tr:

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

Aqui estão os 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 substituir ^M caracteres no editor vi usar abaixo

abra o arquivo de texto dizer t1.txt

vi t1.txt

Introduza o modo de comando pressionando shift + :

em seguida, pressione as teclas conforme mencionado %s/^M/\r/g

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

Uma alternativa para dos2unix comando seria utilizando o padrão de utilitários como sed.

Por exemplo, dos para unix:

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

unix para dos:

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

Você pode remover ^M dos arquivos diretamente através do comando sed, por exemplo:

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

Se você está satisfeito com as alterações, remova-o .bak arquivos:

rm -v *.bak

Converter DOS/Windows ( ) terminações de linha Unix ( ) terminações de linha, com tr:

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

Post sobre a substituição de novas linhas a partir da linha de comando do Unix

od -a $file é útil para explorar esses tipos de pergunta no Linux (semelhante a dumphex acima).

Em Perl, se você não quiser definir o $/ variável e usar chomp() você também pode fazer:

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

Meus dois centavos

Outro comando vi que vou fazer: :%s/.$// Isso remove o último caractere de cada linha do arquivo.A desvantagem desta pesquisa e substituir o comando é que ele não se importa que o último caractere é, então cuidado para não chamá-lo duas vezes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top