【问题标题】:Sed Replace Outside Substrings around Inner SubstringSed 替换内部子串周围的外部子串
【发布时间】:2018-02-01 01:52:42
【问题描述】:

我正在尝试替换位于开始字符串和结束字符串之间的内容,如下所示,其中粗体文本是要替换的内容。

beginningSubstring sometext endingSubstring

我想把它变成别的东西,比如下面的。

newString sometext newString

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


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

【问题讨论】:

  • 不要使用像sed这样的非语法感知解析器来解析HTML

标签: bash awk sed


【解决方案1】:

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 到 markdown 的翻译器。

【讨论】:

  • 替换确实有效,但我相信诸如 html2text 或其他 html 到 markdown 转换器之类的程序可能是一个更好、更有效的步骤,因为我必须在此特定用途中使用多个 sed 命令案子。我仍然对如何替换周围的字符串感兴趣。
猜你喜欢
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 2013-09-28
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 2012-09-10
相关资源
最近更新 更多