Como deletar um número específico no arquivo?

3

Eu tenho um arquivo:

1 2 5 6 8 0 0 0 0
1 2 5 6 8 0 0 0 0
1 2 5 6 8 0 0 0 0
1 2 5 6 8 0 0 0 0

Eu quero excluir todos os zeros:

1 2 5 6 8 
1 2 5 6 8 
1 2 5 6 8 
1 2 5 6 8

Eu tentei tr -d [:0:] . Infelizmente, não é para funcionar desta forma.

Acredito que sed e perl fariam o trabalho, mas não sei exatamente como.

Eu pesquisei no google, se você acredita em mim, os resultados são mistos e relevantes, mas não consigo encontrar o caminho certo na primeira página.

    
por John Hass 25.02.2016 / 16:50

4 respostas

2

tr é bom para este trabalho:

tr -d 0 <file

[:0:] é inválido porque você precisa usar uma classe de caracteres entre [: e :] .

    
por 26.02.2016 / 16:41
4
[8]root@lab711:> cat file
1 2 5 6 8 0 0 0 0
1 2 5 6 8 0 0 0 0
1 2 5 6 8 0 0 0 0
1 2 5 6 8 0 0 0 0
[8]root@lab711:> sed 's/0//g' file
1 2 5 6 8
1 2 5 6 8
1 2 5 6 8
1 2 5 6 8
    
por 25.02.2016 / 17:00
2

Para remover todos os zeros no arquivo, o comando a usar é sed 's/0//g' filename o s significa substituto. O /0 representa todos os 0s no arquivo. o // significa substituir por nada. O g significa globalmente

    
por 25.02.2016 / 17:05
2

Tente

perl -pe 's/\s+0\b//g' <filename>
  • -p faz um loop na linha de arquivos e imprime $_
  • -e executar
  • /g Global (todas as ocorrências)
  • Regex s/\s+0\b// está excluindo a série de pelo menos um espaço, seguida pelo caractere 0 , seguido pelo final da palavra.

Ou, em substituição de lugar no arquivo,

sed -ibbak -e 's/\s\+0\b//g' <filename>
  • -i no lugar
  • -b.bak faz backup (a extensão é .bac )
  • Aqui, o caractere regex + deve ter escape.
  • \s na regex é um espaço
  • \b na regex é o fim da palavra

Espera que dê um pontapé inicial!

    
por 25.02.2016 / 17:03