0

のすべてのインスタンスを見つけてaaa置き換えようとしていますがbbb、 の前の最初の文字を保持していaaaます。PCREを使用してPHPで行う方法は次のとおりです。

preg_replace('#(.?)aaa#', '\1bbb', 'aaasdfg');

sedでそのようなことをするにはどうすればよいですか? これが私の試みです(うまくいきませんでした):

sed -i.bak -r 's/(.\?)aaa/\1bbb/g' filename.ext

少しわざとらしい例です。私がやろうとしていることはもう少し複雑ですが、簡単に言えば、私は.?仕事をしようとしています。

何か案は?

4

1 に答える 1

2

.*?ちょうど今、私はあなたの質問を読み違えました。私はあなたが sedを使いたいと思っていました。..

わかりました、今私はあなたの意味を理解しています。あなたからの別の質問で、BRE の場合、それらの文字に特別な意味を与えるためにこれらの文字をエスケープする必要があると述べました。しかし、ERE では、リテラル文字列を取得するために特別な意味を持つ文字をエスケープする必要があります。

を使用-rして sed に ERE を使用させましたが、エスケープ?しました。つまり、リテラル string と一致させたいということです?

これを試して:

sed -i.bak -r 's/(.?)aaa/\1bbb/g' filename.ext

またはこれ:

sed -i.bak 's/\(.\?\)aaa/\1bbb/g' filename.ext

テスト:

BRE でデフォルト

kent$  echo "aaasdf
xaaasdf"|sed 's/\(.\?\)aaa/\1bbb/'
bbbsdf
xbbbsd

-r を使用すると、ERE:

kent$  echo "aaasdf
xaaasdf"|sed -r 's/(.?)aaa/\1bbb/' 
bbbsdf
xbbbsdf
于 2013-08-27T21:36:52.360 に答える