【问题标题】:Bash: Insert special characters text after string in text fileBash:在文本文件中的字符串后插入特殊字符文本
【发布时间】:2017-05-02 05:40:54
【问题描述】:

查看了很多 sed 和 awk 代码示例,但仍然无法找出我的问题。遇到各种语法问题。

我得到了以下文本文件(请注意,整个内容实际上在 1 行):

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

我需要插入:&lt;tag&gt;myTag&lt;/tag&gt; 在每个&lt;/link&gt; 之后。

最终结果应该是:

<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

【问题讨论】:

  • 请贴出你试过的代码
  • 我试过了:awk '/&lt;\/link&gt;/ { print; print "&lt;tag&gt;myTag&lt;/tag&gt;"; next }1' textfile.txt 但这只是在文件末尾输入。我也尝试使用 sed:sed '/&lt;\/link&gt;/a &lt;tag&gt;myTag&lt;\/tag&gt;' textfile.txt 并得到与 awk 相同的结果。我肯定在这里做错了xD

标签: bash shell awk sed


【解决方案1】:

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

sed -i 's/<\/link>/<\/link><tag>myTag<\/tag>/g' example.xml
  • -i 代表就地并在文件中替换而不是仅输出
  • 模式's/a/b/g' 搜索a 并替换为b,其中g 代表全球所有出现,而不仅仅是一次
  • / 必须转义到 \/

还要小心在 XML 上尝试过多的正则表达式,这会造成严重影响

【讨论】:

    【解决方案2】:

    使用 awk 你会:

    $ 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...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 2018-05-22
      • 1970-01-01
      相关资源
      最近更新 更多