Bash:在文本文件中的字符串后插入特殊字符文本

时间:2017-05-02 05:40:55

标签: bash shell awk sed

一直在查看很多sed和awk代码示例,但仍然无法弄清楚我的问题。得到各种语法问题。

我得到了以下文本文件(注意整个事情实际上是在一行上):

<item><title>myTitle1</title><link>myLink1</link></item><item><title>myTitle2</title><link>myLink2</link></item> etc...

我需要插入:<tag>myTag</tag> 在每个</link>之后。

最终结果应为:

<item><title>myTitle1</title><link>myLink1</link><tag>myTag</tag></item><item><title>myTitle2</title><link>myLink2</link><tag>myTag</tag></item> etc...

那里有任何sed / awk大师= P

2 个答案:

答案 0 :(得分:0)

也许不是最漂亮的方式,但在这里工作:

sed -i 's/<\/link>/<\/link><tag>myTag<\/tag>/g' example.xml
  • -i代表原位并替换文件而不是输出
  • 模式's/a/b/g'搜索a并替换为b,其中g代表所有外观的全局,而不只是一次
  • /必须转发至\/

还要注意尝试过多的关于XML的正则表达式,这将会很难实现

答案 1 :(得分:0)

使用awk你&#d;

$ awk '{gsub(/<\/link>/,"&<tag>myTag</tag>")}1' file
<item><title>myTitle1</title><link>myLink1</link><tag>myTag</tag></item><item><title>myTitle2</title><link>myLink2</link><tag>myTag</tag></item> etc...