Quando executo um script SQL específico em ambientes Unix, vejo um caractere '^ M' no final de cada linha do script SQL, conforme ele é ecoado na linha de comando. Não sei em qual sistema operacional o script SQL foi criado originalmente.
O que está causando isso e como faço para corrigir isso?
sql
unix
newline
line-endings
os-dependent
Paul Reiners
fonte
fonte
brew install dos2unix
o homebrew instaladoCorrija os finais de linha
vi
executando o seguinte::set fileformat=unix
:w
fonte
^M
s por algum motivo. arquivo de referência:/etc/timidity/fluidr3_gm.cfg
.A causa é a diferença entre como um sistema operacional baseado em Windows e um sistema operacional baseado em Unix armazenam os marcadores de fim de linha.
Os sistemas operacionais baseados em Windows, graças à sua herança DOS, armazenam um fim de linha como um par de caracteres -
0x0D0A
(retorno de carro + alimentação de linha). Sistemas operacionais baseados em Unix apenas usam0x0A
(um feed de linha ). O que^M
você está vendo é uma representação visual de0x0D
(um retorno de carro ).dos2unix vai ajudar com isso. Você provavelmente também precisa ajustar a fonte dos scripts para ser 'amigável ao Unix'.
fonte
^M
? Por que o '^'? Por que o 'M'?A maneira mais fácil é usar
vi
.Eu sei que parece terrível, masé simples e já está instalado na maioria dos ambientes UNIX. O ^ M é uma nova linha do ambiente Windows / DOS.no prompt de comando:
$ vi filename
Em seguida, pressione "
:
" para entrar no modo de comando.Pesquisar e substituir tudo globalmente é
:%s/^M//g
" Pressione e segure o controle, pressione V e, em seguida, M " que substituirá ^ M por nada.Então, para escrever e sair, digite "
:wq
" Feito!fonte
Tente usar o dos2unix para retirar o ^ M.
fonte
No vi, faça um
:%s/^M//g
Para obter o
^M
porão da CTRLtecla, pressione Ventão M(ambos enquanto segura a tecla Control) eo^M
aparecerá. Isso localizará todas as ocorrências e as substituirá por nada.fonte
:%s/^M/\r/g
O script SQL foi originalmente criado em um sistema operacional Windows. Os caracteres '^ M' são o resultado do Windows e do Unix terem idéias diferentes sobre o que usar para um caractere de fim de linha. Você pode usar perl na linha de comando para corrigir isso.
fonte
O ^ M é normalmente causado pelas novas linhas do operador do Windows e traduzido para o Unix parece um ^ M. O comando dos2unix deve removê-los bem
dos2unix [opções] [-c convmode] [-o arquivo ...] [-n arquivo de saída infile ...]
fonte
O Sed está ainda mais disponível e pode fazer esse tipo de coisa também se o dos2unix não estiver instalado
Você também pode tentar tr:
Aqui estão os resultados:
fonte
Para substituir os caracteres ^ M no editor vi, use abaixo
abra o arquivo de texto, diga t1.txt
Entre no modo de comando pressionando
shift + :
em seguida, pressione as teclas conforme mencionado
%s/^M/\r/g
fonte
Uma alternativa ao
dos2unix
comando seria usar utilitários padrão comosed
.Por exemplo, dos para unix:
unix para fazer:
fonte
Você pode remover ^ M dos arquivos diretamente por meio do comando sed, por exemplo:
Se você estiver satisfeito com as mudanças, remova os arquivos .bak:
fonte
Converter finais de linha DOS / Windows (\ r \ n) em finais de linha Unix (\ n), com tr:
Postagem sobre a substituição de novas linhas da linha de comando do Unix
fonte
od -a $file
é útil para explorar esses tipos de pergunta no Linux (semelhante ao dumphex acima).fonte
Em Perl, se você não quiser definir a variável $ / e usar chomp (), você também pode fazer:
Meus dois centavos
fonte
Outro comando vi que fará:
:%s/.$//
Isso remove o último caractere de cada linha no arquivo. A desvantagem desse comando de pesquisa e substituição é que ele não se importa com o último caractere, portanto, tome cuidado para não chamá-lo duas vezes.fonte