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

您需要在 the=和 the之间保存匹配的字符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 回答