如何在读取特定字符串后添加字符串?

时间:2012-09-14 18:45:48

标签: perl bash shell unix terminal

我想编写一个要在终端中执行的脚本。

我正在编辑xml文件,我想在检测到xml列的头部之后添加一个字符串或字符串。

以下是xml示例

bunch of line
more unimportant lines
and they can very in number
<States>
<item1> something something </item1>

<item2> something something </item1>

<item3> something something </item1>
</states>

现在我要添加一个项目4.但是,我希望它在item1之前插入。

理想情况下,文件看起来像:

bunch of line
more unimportant lines
and they can very in number
and even some lines were added here
and here
and here
<States>
<item4> something something </item1>
<item1> something something </item1>

<item2> something something </item1>

<item3> something something </item1>
</states>

请注意,顶部还添加了其他内容,这些内容对代码无关紧要。这些是将要进行的评论。

我愿意在perl中这样做,但shell会更好。

2 个答案:

答案 0 :(得分:1)

您可以尝试这样做,假设您的标题States已修复

$ tlines=`wc -l your_file | cut -f1  -d ' '`
$ lno=`grep -n "<States>"  your_file | cut -f1 -d ':'`
$ head -${lno} your_file > your_file.tmp
$ cat file_to_insert >> your_file.tmp
$ tail -`expr ${tlines} - ${lno}` your_file >> your_file.tmp

your_file.tmp将从file_to_insert插入行。

答案 1 :(得分:0)

sed '/<States>/a\
<item4> something something </item4>
' input-file