sed + como deletar o segundo caractere "." da linha

sed + como deletar o segundo caractere "." da linha

como deletar o segundo caractere "." da linha

o que eu tenho é isso (mas remova o primeiro "." da saída

uname -r | sed s'/\./ /'

2 6.18-164.2.1.el5PAE

enquanto eu preciso da seguinte saída

2.6 18-164.2.1.el5PAE

Responder1

Basta adicionar N ao final do comando para que corresponda à enésima correspondência, assim:

uname -r | sed 's/\./ /2'

Para que você precisa disso?


Da infopágina em diante sed:

O comando `s' pode ser seguido por zero ou mais dos seguintes FLAGS:

g

Apply the replacement to _all_ matches to the REGEXP, not just the first.

NÚMERO

Only replace the NUMBERth match of the REGEXP.

Responder2

Aqui estão algumas maneiras de remover o segundo .de uma linha de um arquivo (elas afetarão todas as linhas do arquivo):

  1. sed. Vocêjá temqual é provavelmente a melhor maneira, mas aqui está outra:

    sed 's/\([^.]*\.[^.]*\)\./\1 /' file 
    

    Isso procurará o trecho mais longo de não- .( [^.]*), depois um .( \.), depois o próximo trecho de não- .e finalmente um .( \.). Os parênteses capturam os padrões para que possamos nos referir a eles como \1. Portanto, o comando acima irá apenas deletar o segundo .e substituí-lo por um espaço.

    Se você possui GNU sed(padrão no Linux), pode simplificar para:

    sed -r 's/([^.]*\.[^.]*)\./\1 /' file 
    
  2. Perl

    perl -pe 's/([^.]*\.[^.]*)\./\1 /' file 
    

    ou

    perl -F'\.' -ane 'print "$F[0].$F[1] ", join ".", @F[2..$#F]' file 
    
  3. awk(Tenho certeza que há uma maneira melhor)

    awk -F. '{printf "%s.%s ",$1,$2; for(i=3;i<NF;i++){printf "%s.",$(i); }print $NF}' file 
    

informação relacionada