2011-06-06 32 views
5

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

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" 

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

答えて

6

あなたが署名し、「任期」あなたの等号の間に表示されるテキストをキャプチャするためにキャプチャグループを使用する必要があります。

ので

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". 

を取得するには、Regex groupingを参照してください。

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

あなたが出力に追加し=tenureの間でマッチした文字を保存する必要があります:あなたは、ファイルを編集したい場合にも

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

、あなたはsedをする-iオプションを追加する必要がありますインプレース(ファイル自体の変更を行います)。

2

sedにbackreferenceを使用する必要があります。このようにそれを使用します。

sed 's/\(=.*\)tenure/\1disposition/g' 
関連する問題