Substitua %p por %pK no código do kernel Linux

Substitua %p por %pK no código do kernel Linux

Estou mantendo um driver Linux e quero substituir todos os% p do driver por% pK. Para fazer isso usei o seguinte comando.

grep "%p[^K]" -Rl . | xargs sed -i 's/%p[^K]/%pK/g'

Ele falha no caso abaixo.

%p-%p --> %pK%pK (hyphen is removed)

Por favor, sugira uma expressão regular adequada para que o comando sed funcione.

Responder1

A substituição sed na pergunta removeria todos os caracteres após a %p, não apenas traços, já que [^K]faz parte da string correspondente. Você pode contornar isso capturando o caractere depois %pcom parênteses (escapados) e colocando-o de volta com \1. Em sed:

$ echo '%p %p %pK' | sed 's/%p\([^K]\)/%pK\1/g'
%pK %pK %pK

Embora você possa querer usar [^a-zA-Z]ou similar apenas no caso de usar outros modificadores para %p.

Responder2

Seguir o comando fez mágica para mim

for fname in $(grep "%p[^K]" -Rl .); do perl -pi -e 's/%p(?!K)/%pK/g' $fname; done

Obrigado Sundeep, seu comentário ajudou muito. :)

informação relacionada