6

ワイルドカードに基づいて置換を行いたい。たとえば、"tenure" という単語が「=」記号の後に来る場合にのみ、すべての "tenure" を "disposition" に変更します。基本的に、これに一致する正規表現=.*tenure

このために私が持っているsedコマンドは次のとおりです。

sed 's/=.*tenure/=.*disposition/g' file.txt

ただし、これを次を含むファイルに渡すと:

blah blah blah = change "tenure" to "disposition"

私は得る

blah blah blah =.*disposition" to "disposition"

それ以外の:

blah blah blah = change "disposition" to "disposition"

正規表現のワイルドカードが宛先ファイルの一部にならないように置換するにはどうすればよいですか?

4

4 に答える 4

9

等号と「在職期間」の間に表示されるテキストをキャプチャするには、キャプチャ グループを使用する必要があります。

そう

sed 's/=\(.*\)tenure/=\1disposition/g'

\1を使用して、キャプチャしたグループを参照および使用することに注意してください。

だから

echo 'blah blah blah = change "tenure" to "disposition"' | sed 's/=\(.*\)tenure/=\1disposition/g'

我々が得る

blah blah blah = change "disposition" to "disposition".

正規表現のグループ化を参照してください。

于 2011-06-06T22:21:22.600 に答える
2
sed 's/\(=.*\)tenure/\1disposition/g' file.txt
于 2011-06-06T22:16:07.040 に答える
2

出力に追加するには、=と の間に一致する文字を保存する必要があります。tenure

sed 's/=(.*)tenure/=\1disposition/g' file.txt

また、-iファイルをその場で編集する場合は、sed にオプションを追加する必要があります (ファイル自体に変更を加えます)。

于 2011-06-06T22:16:19.863 に答える
2

sedで後方参照を使用する必要があります。次のように使用します。

sed 's/\(=.*\)tenure/\1disposition/g'
于 2011-06-06T22:17:52.407 に答える