reemplazar un punto con un carácter usando sed o perl

reemplazar un punto con un carácter usando sed o perl

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.1y 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 \dsimplemente se escapa den 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 $1se 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 \Kmata 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).

información relacionada