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).