Por que o sed não está funcionando?

3

Eu tenho um arquivo que tem uma única linha com muitos caracteres ! . Desejo remover todos os caracteres ! .

Eu tentei isso:

sed s/!// myfile

e isso:

sed 's/!//' myfile

e isso:

sed 's/"\!*"//' myfile

Mas todos eles apenas imprimem todos os "!".

Eu devo estar perdendo algo óbvio. Alguma idéia?

    
por Greg_the_Ant 14.03.2012 / 19:55

5 respostas

7

Adicione um g ao seu regexp, para substituição global. Caso contrário, apenas a primeira ocorrência será substituída:

sed s/\!//g myfile
    
por 14.03.2012 / 20:02
4

Tente isto:

$ sed s/\!//g myfile
    
por 14.03.2012 / 20:03
4

Não se esqueça do coitado antigo tr

tr -d '!' < filename

tr só opera em stdin, então você tem que enviar dados para ele.

    
por 14.03.2012 / 21:36
2

adicione o g no final para substituir todas as ocorrências.

sed 's / "! *" // g' myfile

    
por 14.03.2012 / 20:04
2

Você precisa especificar que deseja que todas as ocorrências sejam removidas: sed 's/!//g' myfile
Observe o g , que significa 'ganancioso'.
Sem o 'g', você só tem o primeiro '!' removido

    
por 14.03.2012 / 20:05