Regex sed通配符替换
我想做一个基于通配符的替换。例如,仅当单词“任期”位于“=”符号之后时,才将所有“任期”更改为“处置”。基本上是一个与此匹配的正则表达式 我为此使用的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 '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".
看