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

1

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

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

Falha no caso abaixo.

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

Por favor, sugira a expressão regular adequada para o comando sed funcionar.

    
por Trishansh Bhardwaj 28.10.2016 / 08:03

2 respostas

2

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 .

    
por 28.10.2016 / 11:10
0

O seguinte 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. :)

    
por 28.10.2016 / 10:43