1

我正在尝试用 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

4

1 回答 1

1

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

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

(模式意味着包括任何不是“<”的东西,即直到下一个标签)。使用 sed,您必须为终止字符或一组有效字符决定一种或另一种方式。

.

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

perl -pe 's:<li>lorem.*?</li>::'
于 2013-06-12T11:09:20.797 回答