2011-06-06 80 views
5

我想根據通配符進行替換。例如,只有在「=」符號後面加上「tenure」一詞時,才能將所有「任期」更改爲「處置」。基本上,正則表達式會匹配這個=.*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 

此外,您應該添加-i選項,sed的,如果你要編輯的文件inplace(對文件本身進行修改)。

2

你必須在sed中使用backreference。使用這樣的:

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