1

我正在寻找特定的文本/字符串并删除重复项,然后使用 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>

所以这里的变化是保留第一行并删除重复的,然后将标签框架添加到第二行和 /frame 到最后一行

4

1 回答 1

1

据我所知,您希望仅使用命令行工具删除第二次出现<?xml ... ?>并将标签中的所有内容包装起来。<frame>这一切都可以用 sed 单线完成

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

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

于 2013-09-09T17:18:30.937 回答