Sed:在最后一次出现后追加

标签 sed

假设我有以下类型的文件:

<?xml version="1.0" encoding="utf-8"?>
<preferences>
  <section id="widgets">
    <value id="version" xml:space="preserve">1</value>
  </section>
  <section id="wuid-b2a8e6b8-6619-714e-9cfe-466c27c90902">
    <value id="path to widget data" xml:space="preserve">{Preferences}widgets/opera-adblock-1.3.4-1.oex</value>
  </section>
  <section id="wuid-0c5cfdb2-8e51-f149-a1e7-51d66240ed7a">
    <value id="path to widget data" xml:space="preserve">{Preferences}widgets/flag-button-1.5.4-1.oex</value>
  </section>
</preferences>

我的任务是在最后一次出现 </section> 后立即添加文本。

看看这两个似乎使用 tac 会更简单,但我也不明白如何做到这一点: Using sed to append a string to the fourth occurrence of a pattern , http://www.unix.com/unix-dummies-questions-answers/46294-add-line-after-last-occurnace-pattern.html#post302149709

谢谢。

最佳答案

在字符串第一次出现之前添加内容更容易:

sed '/<\/preferences>/i\ADD SOME TEXT\nADD SOME MORE TEXT' file

结果:
<?xml version="1.0" encoding="utf-8"?>
<preferences>
  <section id="widgets">
    <value id="version" xml:space="preserve">1</value>
  </section>
  <section id="wuid-b2a8e6b8-6619-714e-9cfe-466c27c90902">
    <value id="path to widget data" xml:space="preserve">{Preferences}widgets/opera-adblock-1.3.4-1.oex</value>
  </section>
  <section id="wuid-0c5cfdb2-8e51-f149-a1e7-51d66240ed7a">
    <value id="path to widget data" xml:space="preserve">{Preferences}widgets/flag-button-1.5.4-1.oex</value>
  </section>
ADD SOME TEXT
ADD SOME MORE TEXT
</preferences>

您可以阅读有关如何在字符串 here 之前插入一行的更多信息。哈。

关于Sed:在最后一次出现后追加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14804158/

相关文章:

linux - 求列中字段的平均值

linux - 使用 sed 提取数字

linux - 如何使用正则表达式有效地将参数附加到多个不同的 grub 配置文件

sed - 用于插入命令的复杂 sed 命令

awk - 如何替换括号内的一个字符并保持其他所有字符不变

unix - 如何一次有效地将多列数据附加到制表符分隔文件

正则表达式只匹配数字

bash - sed 删除特定点,包括模式本身

string - 第 N 个字符串匹配,然后删除后面的字符串并使用 sed 放置一个新字符串

regex - 如何在 Bash shell 中使用 GNU sed 只获取带有单引号的行?