
tengo un archivo como este
KN1234.1
KN2345.1
KN1233.1
Quiero reemplazar el . con v para que pueda obtener la salida como
KN1234v1
KN2345v1
KN1233v1
Después de la . siempre es 1 pero después de KN también puedo tener hasta 5 dígitos. Algo como esto también es posible KN14345.1
y su salida debería serKN14345v1
Probé el comando sed
sed 's/KN\d+.1/KN\d+v1/g' file.txt
Pero nada pasó. ¿Cómo puedo arreglar esto?
También se agradecería la solución Perl.
Gracias
Respuesta1
Este:
sed 's/KN\d+.1/KN\d+v1/g' file.txt
no hace nada porque es probable que su sed no sea compatible \d
(creo que es de Perl), por lo que el patrón no coincide con nada. Es posible que desee consultar esto:¿Por qué mi expresión regular funciona en X pero no en Y?
De todos modos, no funcionaría como desea, ya que \d
simplemente se escapa d
en la pieza de reemplazo y +
no es especial, por lo que sus números se reemplazan.
En Perl, es posible que desees algo como esto:
perl -pe 's/(KN\d+)\.1/$1v1/' file.txt
Donde $1
se expande al primer grupo entre paréntesis y se escapa el punto, ya que es una expresión regular paracualquier personaje. O
perl -pe 's/KN\d+\K\.1/v1/' file.txt
Donde \K
mata la parte anterior del partido, para que no sea reemplazada.
Aunque si no te importa el contexto del punto, usa tr
. (o tr///
en Perl).