2011-06-06 1428 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'