我希望搜索特定的文本/字符串并删除重复项,然后使用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>
所以这里的更改是保留第一行并删除重复的,然后将标记帧添加到第二行和/帧到最后一行
答案 0 :(得分:1)
据我所知,您希望删除第二次出现的<?xml ... ?>
,并仅使用命令行工具将所有内容包装在<frame>
标记中。这可以通过sed one-liner
sed '0,/<?xml.*>/! s/<?xml.*>//g' -e '2i <frame>' -e '$a </frame>'
第一个表达式删除除第一个表达式之外的所有<?xml ... ?>
个标记,第二个表达式在第2行插入<frame>
,第三个表达式在末尾附加</frame>
。