检查Unix Shell中两个连续XML标记的出现

时间:2014-11-13 10:15:42

标签: xml shell awk grep ksh

我有以下XML文件:

<PARENT_TAG>
    <CHILD_TAG>
        <DETAIL_1_TAG></DETAIL_1_TAG>
        <DETAIL_2_TAG></DETAIL_2_TAG>
        <DETAIL_3_TAG></DETAIL_3_TAG>
        <DETAIL_4_TAG></DETAIL_4_TAG>
    </CHILD_TAG>
</PARENT_TAG>

即使是

也可以格式化
<PARENT_TAG><CHILD_TAG><DETAIL_1_TAG> ...  </CHILD_TAG></PARENT_TAG>

我想在使用grep,awk,sed之后提取xml标记的名称。 在这种情况下,我会提取&#34; CHILD_TAG&#34;。

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式获得所有内容:

awk '$1=$1' ORS="" file
<PARENT_TAG><CHILD_TAG><DETAIL_1_TAG></DETAIL_1_TAG><DETAIL_2_TAG></DETAIL_2_TAG><DETAIL_3_TAG></DETAIL_3_TAG><DETAIL_4_TAG></DETAIL_4_TAG></CHILD_TAG></PARENT_TAG>

但如果你有更多行,你需要设置一个开始和结束模式。

这是另一个例子:

cat file
test
<PARENT_TAG>
    <CHILD_TAG>
        <DETAIL_1_TAG></DETAIL_1_TAG>
        <DETAIL_2_TAG></DETAIL_2_TAG>
        <DETAIL_3_TAG></DETAIL_3_TAG>
        <DETAIL_4_TAG></DETAIL_4_TAG>
    </CHILD_TAG>
</PARENT_TAG>
more data

awk '/<PARENT/ {f=1} /<\/PARENT/ {f=0} {printf "%s%s",$1,(f?"":RS)}'
test
<PARENT_TAG><CHILD_TAG><DETAIL_1_TAG></DETAIL_1_TAG><DETAIL_2_TAG></DETAIL_2_TAG><DETAIL_3_TAG></DETAIL_3_TAG><DETAIL_4_TAG></DETAIL_4_TAG></CHILD_TAG></PARENT_TAG>
more

仅在PARENT代码中删除换行符。