Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex sed通配符替换_Regex_Sed_Grep_Wildcard_String Substitution - Fatal编程技术网

Regex sed通配符替换

Regex sed通配符替换,regex,sed,grep,wildcard,string-substitution,Regex,Sed,Grep,Wildcard,String Substitution,我想做一个基于通配符的替换。例如,仅当单词“任期”位于“=”符号之后时,才将所有“任期”更改为“处置”。基本上是一个与此匹配的正则表达式 我为此使用的sed命令是: sed 's/=.*tenure/=.*disposition/g' file.txt 但是,如果我将其传递给包含以下内容的文件: blah blah blah = change "tenure" to "disposition" 我明白了 blah blah blah =.*disposition" to "dispositi

我想做一个基于通配符的替换。例如,仅当单词“任期”位于“=”符号之后时,才将所有“任期”更改为“处置”。基本上是一个与此匹配的正则表达式

我为此使用的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"

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

您需要在
=
任期之间保存匹配的字符,以便将它们添加到输出中:

sed 's/\(=.*\)tenure/\1disposition/g' file.txt
sed 's/=(.*)tenure/=\1disposition/g' file.txt
此外,如果要在位编辑文件(对文件本身进行修改),则应将
-i
选项添加到sed中。

必须在sed中使用。像这样使用它:

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

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

所以

sed的/=\(.*\)任期/=\1disposition/g'
注意使用
\1
引用和使用您捕获的组

所以在

echo'blah blah blah=将“任期”更改为“处置”| sed's/=\(.*\)任期/=\1disposition/g'
我们得到

blah blah blah = change "disposition" to "disposition".