【问题标题】:Regex not capturing newlines when used in sed or perl [duplicate]在 sed 或 perl 中使用时,正则表达式不捕获换行符 [重复]
【发布时间】:2017-12-31 14:45:26
【问题描述】:

我有一个我正在尝试清理的 CSV 文件,其中一部分是删除某些值中的 HTML 标记。我遇到了这个解决方案:sed -e 's/<[^>]*>//g' file.html 来自这个thread

在尝试之前,我使用RegExr 测试了正则表达式 (/<[^>]*>/g)。我使用以下作为我的文本示例:

<asd>
< asd >
< asdsad
 adsad >

在 RegExr 上,所有三个标签都匹配,但是,当我使用 sed 命令删除标签时,第三个标签仍然存在,即我只剩下:

< asdsad
 adsad >

我还需要能够删除多行标签,因为我试图清理的 CSV 中的许多标签都具有带引号的属性,例如 class="some-class-name",而这些引号与 CSV 格式相混淆。

我也尝试过 Perl 命令,因为 Perl 应该具有更好的多行处理能力。我试过perl -pe 's/&lt;[^&gt;]*&gt;//g' file,但结果和sed一样。

编辑:为了解决可能重复的问题,我的问题是基于为什么一个正则表达式引擎 (RegExr) 捕获的实体与另一个 (sed 和 Perl) 不同的实体以及如何让其他引擎显示第一个结果。 possible duplicate 的回答恰好解决了我的问题,尽管问题来自不同(但相似)的地方。

【问题讨论】:

标签: html regex perl csv sed


【解决方案1】:

为了清楚起见,我将在@LukStorms 的评论中发布答案。来自this thread的回答。

TL;DR:-0 标志解决了这个问题,至少在 Perl 中是这样。

完整命令:perl -0pe 's/&lt;[^&gt;]*&gt;//g' file

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    相关资源
    最近更新 更多