【问题标题】:Return each instance of a regex返回正则表达式的每个实例
【发布时间】:2011-07-31 02:10:47
【问题描述】:

我在 Google 上进行了广泛的搜索,每个人都在告诉我如何返回正则表达式匹配的 LINE...

假设我在文本文件中有这样一行:

<a href=http://google.com> Google </a>

我希望能够仅返回 > 和

我想它会是这样的:

sed 's/>.*</p'

但显然这行不通......

它杀了我,因为我确定它可能非常简单,但我就是找不到正确的 sed 行。 sed 可以不做吗?

所以我只想让它搜索一个文件,匹配我给它的正则表达式,然后返回完全匹配(不是行)

有人有什么想法吗?

【问题讨论】:

    标签: regex string sed awk pattern-matching


    【解决方案1】:

    使用`sed

    sed -n 's/^.*>\([^<]*\)<.*$/\1/p'
    

    【讨论】:

    • @glenn:那么我会说使用真正的 XML/HTML 解析器。如果它比简单的正则表达式更难,那么是时候放弃更简单的工具了。
    【解决方案2】:

    如果您有 GNU grep,-o 选项可以满足您的需求。

    echo '<a href=http://google.com> Google </a><span>foo</span>' | 
    grep -oP '(?<=>).*?(?=<)'
    

    返回

     Google 
    foo
    

    这假设您的 html 标记及其包含的数据位于一行。这不匹配

    <a href=...>
    blah
    </a>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-23
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      相关资源
      最近更新 更多