我正在尝试创建一个正则表达式,它将找到一个地方,获取其内容并将其放置在同一行的另一个地方。
我已经完成了我能找到所需信息的位置:
(?<=\{)(.*\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
到目前为止,我有一个部分找到放置信息的地方和我想要信息的地方,但我不确定如何移动信息并合并两个正则表达式。
答案 0 :(得分:0)
对于您展示的简单示例,您可以执行(我在file
中保存了示例字符串):
$ sed -E 's|type=""(.*)(\\type\{([^}]+)\}.*)|type="\3"\1\2|' file
<parameter name="some name" value="VALU" type="INT" perm="" ncpv="1"><doc></doc></parameter> \type{INT}\ro some documentation
但是,这非常脆弱,很可能会失败。例如,如果您的行具有多个\type{
实例,它只会更改type=
为空的行(type=""
),它将不会处理嵌套标记,或者标签分为多行的情况。
与往常一样,使用专用的XML解析器是可行的方法,但这适用于简单的情况。