代码之家  ›  专栏  ›  技术社区  ›  T H Wright

Sed替换内部子字符串周围的外部子字符串

  •  0
  • T H Wright  · 技术社区  · 7 年前

    我试图替换位于开始字符串和结束字符串之间的内容,例如下面的内容,其中粗体文本就是要替换的内容。

    起始子字符串 sometext 结束子字符串

    我想将此转换为其他内容,例如以下内容。

    必选项 sometext 必选项

    我将如何使用单个sed(或awk)进行此替换?


    我的具体用例是,我在一个网站上使用curl在Linux CLI上检索信息,并尝试显示各种内容。我希望使输出更可读/更短,并希望替换HTML标记,如 <strong>someText</strong> 具有 *someText* <em>someText</em> 具有 ~someText~ 以便在不完全删除内容的情况下保持内容的存在。我希望使用一个sed来进行此替换,因为我希望将开始标记和结束标记配对在一起,这样我就不必为了确定结束标记应该是什么而确定是否存在以前替换的开始标记。

    1 回复  |  直到 7 年前
        1
  •  0
  •   karakfa    7 年前

    具有 sed

    $ echo "<strong>someText</strong> <p>XXX</p>  <strong>someOtherText</strong>"
      sed -E 's_<strong>([^<]*)</strong>_*\1*_g' 
    

    将给予

    *someText* <p>XXX</p>  *someOtherText*
    

    但是,不建议使用需要设置的html和特殊字符。也许您正在寻找html来标记转换器。