如何在正则表达式中使用sed命令?

时间:2019-05-16 08:23:55

标签: bash sed

我有一个输入文件(PowerCenter xml文件),我需要替换目标环境的快捷方式。所以我需要用SHORTCUT找到一行,然后在REPOSITORYNAME

中更改参数

我试图找到从REPOSITORYNAME到eol的子字符串,并替换引号之间第一个出现的“ whatever”。我找到了一个正则表达式“。*?”在regexr.com中有效,但在bash中无效

input=SHORTCUT COMMENTS="" REFERENCETYPE="LOCAL" REFOBJECTNAME="mplt_EBXSOAPExport" REPOSITORYNAME="ZRH_PCE_P01" VERSIONNUMBER="1"/>"

x=$(echo $input | grep -o 'REPOSITORYNAME.*>' | sed -r '{0,/\".\+?\"/s/\".\+?\"/\"TARGET\"/}')
echo $x;


input="SHORTCUT COMMENTS="" REFERENCETYPE="LOCAL" REFOBJECTNAME="mplt_EBXSOAPExport" REPOSITORYNAME="any_word" VERSIONNUMBER="1"/>"

another possible input="SHORTCUT COMMENTS="" REFERENCETYPE="LOCAL" REFOBJECTNAME="mplt_EBXSOAPExport" REPOSITORYNAME = "any_word" VERSIONNUMBER="1"/>"

output="SHORTCUT COMMENTS="" REFERENCETYPE="LOCAL" REFOBJECTNAME="mplt_EBXSOAPExport" REPOSITORYNAME="updated" VERSIONNUMBER="1"/>"

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

sed '/SHORTCUT/s/REPOSITORYNAME\s*=\s*"[^"]*"/REPOSITORYNAME="WhatYouWant"/'

它测试一行是否包含SHORTCUT,并在执行该操作时执行与REPOSITORYNAME及其值匹配的搜索/替换,并用新的替换它。

您可以try it here