
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 info
pá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):
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
perla
perl -pe 's/([^.]*\.[^.]*)\./\1 /' file
o
perl -F'\.' -ane 'print "$F[0].$F[1] ", join ".", @F[2..$#F]' file
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