我正在尝试创建一个正则表达式,它将找到一个地方,获取其内容并将其放置在同一行的另一个位置。
我已经完成了可以找到我想要的信息的地方:
(?<={)(.*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解析器是可行的方法,但这适用于简单情况。