【问题标题】:replace a string upto and including the first instance of another string in OS X在 OS X 中替换一个字符串直到并包括另一个字符串的第一个实例
【发布时间】:2013-06-12 19:44:50
【问题描述】:

我正在尝试用 sed(在 OS X 中)将一个字符串替换为第二个字符串的第一个实例。不幸的是,我的 sed 命令替换了直到第二个字符串的最后一个实例的所有内容。

我的文字:

<li>lorem ipsum</li><li>dolor sit amet</li><li>something</li><li></li>

我需要删除 <li>lorem ipsum</li> 以便新行如下所示:

<li>dolor sit amet</li><li>something</li><li></li>

不幸的是,我的 sed 命令替换了整行:

sed -i "" 's:<li>lorem.*</li>::'

你知道如何用 sed 解决这个问题吗?

谢谢 AleV

【问题讨论】:

  • sed 's:&lt;li&gt;lorem.[a-z]*&lt;/li&gt;::' 呢?
  • 就像一个魅力。谢谢!
  • 更一般地说,`sed 's:
  • lorem[^::' - 这并不假设您在文本中只有字母。但是,正则表达式通常不能解析不是正则语言的 XML:您应该寻找 XML 或 HTML 解析器。

标签: regex macos sed


【解决方案1】:

我认为最接近你想要的是这个:

sed -i "" 's:<li>lorem[^<]*</li>::'

(模式意味着包括任何不是“

.

然而,最干净的解决方案当然是非贪婪匹配,但 sed 不提供(参见 non greedy regexp),但根据链接使用 perl 将是一种解决方案:

perl -pe 's:<li>lorem.*?</li>::'

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签