Convertendo arquivos de texto do DOS para o Unix

3

Eu tenho um monte de scripts PHP que estão no formato DOS ( vi exibido [noeol] [dos] na linha de status) e como esperado, eles não eram utilizáveis.

Eu corri dos2unix sobre eles para corrigir os endins da linha:

dos2unix index.php

mas quando eu abro os arquivos em vi ainda vejo [noeol] na linha de status.

Ao verificá-los no modo de editor hexadecimal do vi ( :%!xxd ), não vejo nada que salte em mim.

Nos arquivos originais, a linha termina como: 0x0D 0x0A

Se depois de passar por dos2unix , eles se parecem com: 0x0A

Também verifiquei se a última linha do arquivo tem um final de linha adequado e também está lá ( 0x0A ).

O que mais poderia estar causando isso, devo me preocupar?

Estou executando o CentOS 5.6 x64.

    
por Kev 25.08.2011 / 15:45

6 respostas

5

Como o @Klox disse, depois de running dos2unix , o problema restante vi é a falta da nova linha na última linha.

Se você abrir o arquivo em vi e salvá-lo, ele adicionará a nova linha para você.

Ou em um lote, você pode fazer tudo com ed :

#!/bin/bash
for f in <list-of-files-goes-here>; do
    ed -s -- "$f" <<<$',s/\r//g\nw' >/dev/null
done
    
por 25.08.2011 / 16:02
2

Está apenas avisando que você não tem um fim de linha (\ n) na última linha.

    
por 25.08.2011 / 15:49
1

Máquinas DOS inserem um retorno de carro no final das linhas (eol), ele deve ficar assim em vi ^M .

Tente executar isso:

:%s/^M//g
    
por 25.08.2011 / 15:50
1

Você também pode usar ed para converter seus arquivos php, pois ed adicionará as novas linhas finais ausentes também.

Usando ed , não há necessidade de arquivos tmp.

# using Bash
IFS=$'\n'
for file in *.php; do
   ed -s "$file" <<< $'H\n,g/\r*$/s///\nwq'
   #printf '%s\n' H $',g/\r*$/s///' wq | ed -s "$file"
done
    
por 25.08.2011 / 17:24
0

Se você usar o vim (ao invés de um antigo skool vi), você pode fazer isso:

:set ff=dos
:e!

e você poderá editar os arquivos PHP sem todos os sufixos "^ M". Eu acredito que ele salvará como um formato de "arquivo de texto" do DOS também. Isso pode ser útil se você compartilhar os arquivos com o Windows (ugh!) De alguma forma.

Um pouco de editoração: o token de fim de linha de dois bytes escolhido para o MS-DOS deve ter sido um dos maiores problemas que o MS-DOS impingiu ao mundo, depois de segmentos, letras de unidade e " \ "como separador de diretórios. Esse token de dois bytes ainda é o motivo de uma diferença entre "texto" e "binário". Ickk.

    
por 25.08.2011 / 17:26
0

tente isso

find . -type f | xargs -I {} dos2unix {}

    
por 11.03.2015 / 16:25