使用 sed 查找第一个并替换一行中的第一个匹配项而不是最后一个匹配项

使用 sed 查找第一个并替换一行中的第一个匹配项而不是最后一个匹配项

我有以下 sed 命令: sed 's/\('\''\).*div><div>/,/'

它采用单引号'和之间的所有内容div><div>并用逗号替换它,。它的工作效果非常接近我想要的效果。然而,有些行包含两行div><div>,我的命令将第二行作为其停止点,我试图在第一行处将其切断。

为了尝试提供更清晰的信息,以下是我尝试从中提取数据的文件中的行:

'>Person A</a></div><div>Teaching A</div></div></td><td width='50%'><div style='height: 50px; margin-bottom: 6px;'><div style='font-weight:bold'>Unknown or external</div><div>Teaching B<

我正在尝试替换所有内容,直到Teaching A我的输出看起来应该像这样,Teaching A。然而我得到的输出是,Teaching B.

我如何操作我的 sed 命令来获取第一个实例div><div>而不是最后一个实例?

答案1

@AdminBee:我还建议非贪婪匹配
@Dr Little:你的解决方案是什么?请告诉我们。

如果我理解正确的话,这也应该有效: sed 's/\('\''\).*<.a><div><div>/,/'.

请理解,不建议使用正则表达式解析 HTML 文件。例如,有一次我使用 vim+regex 解析数十个数千个 HTML 文件,这是一项时间敏感的任务,我很遗憾这样做。为什么?因为如果我使用实际的 XML/HTML 解析器来解析文本文件/提取行和数据,任务可能会更快地完成。

相关内容