sed + cómo eliminar el segundo carácter "." desde la línea

sed + cómo eliminar el segundo carácter "." desde la línea

cómo eliminar el segundo carácter "." desde la línea

lo que tengo es esto (pero elimina el primer "." de la salida

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

2 6.18-164.2.1.el5PAE

mientras necesito el siguiente resultado

2.6 18-164.2.1.el5PAE

Respuesta1

Simplemente agregue N al final del comando para que coincida con la enésima coincidencia, así:

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

¿Para qué lo necesitas?


De la infopágina en sed:

El comando `s' puede ir seguido de cero o más de los siguientes BANDERAS:

gramo

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

NÚMERO

Only replace the NUMBERth match of the REGEXP.

Respuesta2

Aquí hay algunas formas de eliminar el segundo .de una línea de un archivo (afectarán a todas las líneas del archivo):

  1. sed. Túya tengocuál es probablemente la mejor manera, pero aquí hay otra:

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

    Esto buscará el tramo más largo de no .( [^.]*), luego un .( \.), luego el siguiente tramo de no .y finalmente un .( \.). Los paréntesis capturan los patrones por lo que podemos referirnos a ellos como \1. Por lo tanto, el comando anterior simplemente eliminará el segundo .y lo reemplazará con un espacio.

    Si tiene GNU sed(predeterminado en Linux), puede simplificar a:

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

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

    o

    perl -F'\.' -ane 'print "$F[0].$F[1] ", join ".", @F[2..$#F]' file 
    
  3. awk(Estoy seguro de que hay una mejor manera)

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

información relacionada