Substituir todos, exceto um conjunto de caracteres em um arquivo com nova linha

2

como excluir todos os caracteres no arquivo, exceto números e "." ,  cada palavra (numeração / ponto) deve estar em nova linha no arquivo veja exemplo2

  • a solução pode ser com sintaxe sed ou awk ou ksh

observação - a solução deve estar de acordo com o exemplo 2

exemplo 1

arquivo antes da edição

  192.0.22.1++0.1
  e32)5.500.5.5*kjcdr
  ##@$1.1.1.1+++jmjh
  1.1.1.1333
  33331.1.1.1
  @5.5.5.??????
  ~3de.ede5.5.5.5
  1.1.1.13444r54
  192.9.30.174
  &&^#%5.5.5.5
  :5.5.5.5@%%^^&*
  :5.5.5.5:
  **22.22.22.22
  172.78.0.1()*5.4.3.277
  3.3.3ki.3.

exemplo 2 do arquivo depois de excluir todos os caracteres, exceto números e "." charter, cada nova palavra estará em nova linha

  192.0.22.1
  0.1
  32 5.500.5.5
  1.1.1.1
  1.1.1.1333
  33331.1.1.1
  5.5.5.
  .
  5.5.5.5
  1.1.1.13444
  54
  192.9.30.174
  5.5.5.5
  5.5.5.5
  5.5.5.5
  22.22.22.22
  172.78.0.1 
  5.4.3.277
  3.3.3 .3.
    
por yael 15.11.2012 / 13:54

5 respostas

4

Este é um caso de uso clássico do tr , por isso a maneira mais simples é:

tr -cs '[:digit:].' '[\n*]' < input > output

O argumento [:digit:]. especifica os caracteres a serem correspondidos (dígitos e ponto). O [\n*] especifica os caracteres para substituir por (substitua tudo por nova linha). A opção -c inverte o primeiro argumento, pois queremos tudo, exceto dígitos e ponto. O -s comprime as novas linhas consecutivas da segunda cadeia em uma.

    
por 15.11.2012 / 20:19
1

grep pode fazer isso:

grep -o '[0-9.]\+'
    
por 15.11.2012 / 22:24
0

Você pode usar sed para substituir qualquer caractere indesejado por uma nova linha e, em seguida, grep para se livrar das linhas vazias:

sed 's/[^0-9.]/\n/g' | grep . 

Observe que o resultado é diferente daquele que você postou: 32 5.500.5.5 é dividido em duas linhas, além da última linha.

Solução Perl: divide cada linha em caracteres indesejados e greps para linhas não vazias.

perl -ne 'print "$_\n" for grep /./, split /[^0-9.]+/'
    
por 15.11.2012 / 14:05
0

Aqui está uma maneira com o GNU sed :

sed ':a;{N;s/[^\.0-9]\+/\n/g};ba' file

Veja como funciona:

  1. Crie um rótulo de filial;
  2. Anexar linha atual / próxima para se registrar;
  3. Filial se não for a última linha;
  4. Substitua todos os grupos que não estão combinando com novas linhas.

Usar o ramo evita novas linhas espúrias.

    
por 15.11.2012 / 14:12
0

no RHEL7:

substitua qualquer linha que comece por VALUETOEDIT

sed -i -e 's/^VALUETOEDIT.*/NEWVALUE/g' somefile
    
por 14.12.2018 / 15:14

Tags