sed通配符替换

Ste*_*eve 5 regex grep sed wildcard string-substitution

我想基于通配符进行替换.例如,只有当"任期"一词出现在"="符号后面时,才将所有"任期"改为"处置".基本上是一个匹配这个的正则表达式=.*tenure

我这样做的sed命令是:

sed 's/=.*tenure/=.*disposition/g' file.txt
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其传递给包含以下内容的文件:

blah blah blah = change "tenure" to "disposition"
Run Code Online (Sandbox Code Playgroud)

我明白了

blah blah blah =.*disposition" to "disposition"
Run Code Online (Sandbox Code Playgroud)

代替:

blah blah blah = change "disposition" to "disposition"
Run Code Online (Sandbox Code Playgroud)

如何进行替换,使正则表达式中的通配符不会成为目标文件的一部分?

MGw*_*nne 8

您需要使用捕获组来捕获等号和"任期"之间出现的文本.

所以

sed 's/=\(.*\)tenure/=\1disposition/g'
Run Code Online (Sandbox Code Playgroud)

请注意使用\1引用和使用您捕获的组.

所以

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

我们得到

blah blah blah = change "disposition" to "disposition".
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式分组.