搜索字符串并删除重复项,并使用bash将新行添加到文本的第二行和最后一行

时间:2013-09-09 16:29:00

标签: xml bash annotations

我希望搜索特定的文本/字符串并删除重复项,然后使用bash将特定文本添加到文件的第二行和最后一行

For eg: I have this format:
<?xml version="1.0" encoding="iso-8859-1"?>
<annotation type="face">
    <object id="0">
        <arg name="pos_x" value="822"/>
        <arg name="pos_y" value="245"/>
        <arg name="pose" value="front"/>
        <arg name="size_x" value="63"/>
        <arg name="size_y" value="77"/>
        <arg name="score" value="112"/>
    </object>   
</annotation>
<?xml version="1.0" encoding="iso-8859-1"?>
<annotation type="track">
    <object id="0">
        <arg name="pos_x" value="682"/>
        <arg name="pos_y" value="247"/>
        <arg name="pose" value="front"/>
        <arg name="size_x" value="121"/>
        <arg name="size_y" value="121"/>
        <arg name="score" value="178"/>
    </object>
    <object id="1">
        <arg name="pos_x" value="786"/>
        <arg name="pos_y" value="243"/>
        <arg name="pose" value="front"/>
        <arg name="size_x" value="128"/>
        <arg name="size_y" value="128"/>
        <arg name="score" value="161"/>
    </object>   
</annotation>

and i need this format
<?xml version="1.0" encoding="iso-8859-1"?>
<frame>
<annotation type="face">
    <object id="0">
        <arg name="pos_x" value="822"/>
        <arg name="pos_y" value="245"/>
        <arg name="pose" value="front"/>
        <arg name="size_x" value="63"/>
        <arg name="size_y" value="77"/>
        <arg name="score" value="112"/>
    </object>   
</annotation>
<annotation type="track">
    <object id="0">
        <arg name="pos_x" value="682"/>
        <arg name="pos_y" value="247"/>
        <arg name="pose" value="front"/>
        <arg name="size_x" value="121"/>
        <arg name="size_y" value="121"/>
        <arg name="score" value="178"/>
    </object>
    <object id="1">
        <arg name="pos_x" value="786"/>
        <arg name="pos_y" value="243"/>
        <arg name="pose" value="front"/>
        <arg name="size_x" value="128"/>
        <arg name="size_y" value="128"/>
        <arg name="score" value="161"/>
    </object>   
</annotation>
</frame>

所以这里的更改是保留第一行并删除重复的,然后将标记帧添加到第二行和/帧到最后一行

1 个答案:

答案 0 :(得分:1)

据我所知,您希望删除第二次出现的<?xml ... ?>,并仅使用命令行工具将所有内容包装在<frame>标记中。这可以通过sed one-liner

完成
sed '0,/<?xml.*>/! s/<?xml.*>//g' -e '2i <frame>' -e '$a </frame>'

第一个表达式删除除第一个表达式之外的所有<?xml ... ?>个标记,第二个表达式在第2行插入<frame>,第三个表达式在末尾附加</frame>