正则表达式找到一个地点,并将找到的内容替换到另一个地点



我正在尝试创建一个正则表达式,它将找到一个地方,获取其内容并将其放置在同一行的另一个位置。

我已经完成了可以找到我想要的信息的地方:

(?<={)(.*n?)(?=})
(?<=type=")(.*n?)(?=" perm)

示例字符串:

<parameter name="some name" value="VALU" type="" perm="" ncpv="1"><doc></doc></parameter>  type{INT}ro some documentation

在这个例子中,我想把"INT"放在"type=""中,这样它就会变成:

<parameter name="some name" value="VALU" type="INT" perm="" ncpv="1"><doc></doc></parameter>  type{INT}ro some documentation
到目前为止,我

有找到放置信息的位置和我想要信息的位置的部分,但我不确定如何移动信息并组合两个正则表达式。

对于您展示的简单示例,您可以这样做(我将示例字符串保存在 file 中(:

$ sed -E 's|type=""(.*)(\type{([^}]+)}.*)|type="3"12|' file 
<parameter name="some name" value="VALU" type="INT" perm="" ncpv="1"><doc></doc></parameter>  type{INT}ro some documentation

但是,这是非常脆弱的,并且很可能失败。例如,如果您的行有多个type{实例,它将失败,它只会更改type=为空的行(type=""(,它不会处理嵌套标签,或者标签被拆分为多行的情况。

与往常一样,使用专用的XML解析器是可行的方法,但这适用于简单情况。

最新更新