ti-enxame.com

O script Unix acrescenta ^ M no final de cada linha

Eu tenho um script Unix Shell que faz o seguinte:

  1. cria um backup de um arquivo
  2. anexa algum texto a um arquivo

Agora no número 2, se eu inserir um texto, ^ M é anexado a todas as linhas do arquivo.

Por exemplo:

echo " a" >> /cust/vivek.txt
echo " b" >> /cust/vivek.txt

vi vivek.txt
abc^M
bcd^M
a^M
b^M

Alguma maneira de evitar isso?

12
Vivek Iyer

Não sei como echo poderia estar produzindo ^M caracteres, mas você pode removê-los executando dos2unix no seu arquivo, assim:

dos2unix /cust/vivek.txt
13
dogbane

^M é um retorno de carro e geralmente é visto quando arquivos são copiados do Windows. Usar:

od -xc filename

que deve fornecer uma lista de baixo nível da aparência do seu arquivo. Se o seu arquivo não vier do Windows, outra possibilidade é que a configuração do terminal não esteja sendo traduzida corretamente. Verifique se a variável de ambiente TERM está correta.

Se o arquivo vier do Windows, use dos2unix ou sed 's/\r//' file > file.new

4
cdarke

Eu suspeito que isso possa ser um artefato das suas configurações do vi, em vez da concatenação.

O que

cat -v -e filename

mostrar ? Este comando irá despejar seu arquivo e marcar os caracteres de controle, para que fique claro o que realmente está no seu arquivo. Veja também esta pergunta/resposta do superusuário .

2
Brian Agnew

^ M são os meta caracteres que entraram no seu arquivo quando este foi usado no Windows.

o comando dos2unix pode corrigir isso.

dos2unix <filename>
2
Antarus

Somente

sed -e "s/\r//g" file

trabalhou para mim

2
Pavel Prochazka