Como remover Ctrl-M de arquivos onde dos2unix, perl, tr e sed não estão presentes?

9

Suponha que você está trabalhando em um servidor unix muito antiga, onde dos2unix, perl, tr, e sednão estão presentes. Como você pode converter arquivos de dos para o formato unix ?

Hemant
fonte
sed é permitido?
Elmarco 12/08/10
@elmarco: no :(
Hemant
9
Qual a idade de um servidor unix para não ter tre sed? sedé antigo ........ iirc,
xenoterracide
11
Estaria exou edestaria disponível em um sistema como esse? Eu não chamaria isso de unix se não houver trou sed.
Matt Bianco
3
Não sed? Realmente!? Fora de interesse, qual é o sistema? Como Gilles e MattBianco apontam, provavelmente ainda o teria ed.
Mikel

Respostas:

12

Eu acho que você está se referindo à remoção do sinal de intercalação-M no final das linhas. Você pode usar a pesquisa e a substituição no vi para fazer isso.

No vi, normalmente faço: (onde "^" representa CTRL):

:%s/^V^M//g

O que aparece na tela como:

:%s/^M//g
jjclarkson
fonte
obrigado que funcionou :). Eu acho que é uma solução muito portátil.
Hemant
4
Você também pode usar sed para fazer a mesma coisa sem precisar vim o arquivo: sed -e '% s / ^ V ^ M // g' nome do arquivo Isso também será exibido na tela como sed e '% s / ^ M // g 'filename Em geral, se você pode procurar / substituí-lo no vim, o comando é praticamente o mesmo no sed.
Gabe.
2
@gabe: a solução sed é realmente ainda mais portátil +1 :)
wzzrd
@wzzrd sede visão ambos especificados pelo POSIX , e esse vicomando não usa nenhuma extensão do Vim.
Curinga
@jjclarkson o que significa ^Ve '^ M' significa?
Cokeude 28/04
6

Um servidor sem trou sedprecisaria ser muito antigo ou perder alguns comandos básicos. Espero que edesteja lá; existia na primeira edição do Unix .

ed /path/to/file
1,$s/^V^M$//
w
q

onde ^V^Msignifica digitar Ctrl+ Ve Ctrl+ M(para inserir um feed de linha literal). Se você souber que todas as linhas terminam em CR LF, use-o 1,$s/.$//(remova indiscriminadamente o último caractere de cada linha).

Gilles 'SO- parar de ser mau'
fonte