我有一个输入文件(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"/>"
谢谢
答案 0 :(得分:0)
您可以使用以下内容:
sed '/SHORTCUT/s/REPOSITORYNAME\s*=\s*"[^"]*"/REPOSITORYNAME="WhatYouWant"/'
它测试一行是否包含SHORTCUT,并在执行该操作时执行与REPOSITORYNAME及其值匹配的搜索/替换,并用新的替换它。
您可以try it here!