Isto:
sed 's/KN\d+.1/KN\d+v1/g' file.txt
não faz nada porque o seu sed provavelmente não suporta \d
(eu acho que é do Perl), então o padrão não combina com nada.
Você pode querer se referir a isto: Por que minha expressão regular funciona em X, mas não em Y?
Não funcionaria como você deseja, pois o \d
apenas escapa do d
na peça de substituição e +
não é especial, então seus números são substituídos.
Em Perl, você pode querer algo assim:
perl -pe 's/(KN\d+)\.1/$1v1/' file.txt
Onde $1
se expande para o primeiro grupo entre parênteses, e o ponto é escapado, pois é regex para qualquer caractere . Ou
perl -pe 's/KN\d+\K\.1/v1/' file.txt
Onde \K
mata a parte anterior da correspondência, para que não seja substituída.
No entanto, se você não se importar com o contexto do ponto, use tr
. (ou tr///
em Perl).