Linuxカーネルコードで%pを%pKに置き換えます。

Linuxカーネルコードで%pを%pKに置き換えます。

私はLinuxドライバを維持しており、ドライバのすべての%pを%pKに置き換えたいと思います。これを行うには、次のコマンドを使用しました。

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

次の場合は失敗します。

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

sed コマンドが正しく機能するように正しい正規表現を提案してください。

ベストアンサー1

質問の sed 置換は a が一致する文字列の一部である%pため、ダッシュだけでなく a の後ろのすべての文字も削除します。 (エスケープされた)角かっこを使用して次の文字をキャプチャしてからを使用して再配置すると、この問題を解決[^K]できます。存在する:%p\1sed

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

[^a-zA-Z]他の修飾子を使用したい場合、または同様のものを使用したい場合があります%p

おすすめ記事