特定の単語が前に出ていないすべての単語を使用またはsed
置換したいです。perl
たとえば、映画のプロットを含むテキストファイルがあり、すべての姓をキャラクターの名前に変更したいとします。ただし、名前が姓の直前に来ない場合にのみ該当します。
サンプルテキストは次のとおりです。
John Smith and Jane Johnson talk about Smith's car.
私はそれが次のように見えるようにしたいです:
John Smith and Jane Johnson talk about John's car.
これにより、次のsed 's/Smith/John/' file
ようになります。
John John and Jane Johnson talk about John's car.
姓の前の名前は常に同じです。私はJohn Smith
andを扱う必要はありませんFrank Smith
。Smith
以前に存在しなかったマッチング方法が必要です。John
ベストアンサー1
これは正規表現が逆に見えるすべての言語で簡単です。もちろん、Perlはリストの最初です。
perl -pe 's/(?<!John\W)Smith/John/g' <<< "John Smith and Jane Johnson talk about Smith's car."
弱点は、「ジョン」と「スミス」の間に単語以外の文字が複数あることです。残念ながら、+
forなどの数量子は、\W
「可変長逆引き参照が実装されていません」というエラーを発生させる可能性があります。