次のような文字列がある場合:
p1 and p11 are going to visit p111. p1 is the father of p111
p{n} の各インスタンスを別の値に置き換えるために sed (または実際には何か) を使用するにはどうすればよいですか? 結果は次のようになります。
Bob and Jane are going to visit Paul. Bob is the father of Paul
基本的には、sed に「正確に p{n} の後に数字以外が続くものを見つけて $var に置き換えますが、{n} に続くものは置き換えないでください」と伝える方法を探しています。
次のような簡単なことをすると
text="p1 and p11 are going to visit p111. p1 is the father of p111"
text=`echo "$text" | sed s/p1/Bob/g`
「p1」をすべて「Bob」に置き換えることになり、その後の置換は行われません。
Bob と Bob1 は Bob11 を訪問します。Bob は Bob11 の父親です
私が来た最も近いものは次のようなものです
text=`echo "$text" | sed 's/p1[^0-9]/bob/g'`
これには 2 つの問題があります。末尾の文字 (スペース、句読点) を消費することと、行末の p{n} に一致しないことです。交換する必要があるすべてをループした後:
ボバンド・ジェネアがp111の父ポール・ボビスを訪ねる
他の変数に挿入せず、末尾の数字以外の文字を消費せずに、置き換える必要があるものを見つける方法を知っている人はいますか?
ありがとう。