A substituição do sed na questão removeria todos os caracteres após um %p , não apenas os traços, pois o [^K] faz parte da sequência de correspondência. Você pode contornar isso capturando o caractere após %p com parênteses (com escape) e colocando-o novamente com . Em sed :
$ echo '%p %p %pK' | sed 's/%p\([^K]\)/%pK/g'
%pK %pK %pK
Embora você queira usar [^a-zA-Z] ou similar apenas no caso de usar outros modificadores para %p .