【问题标题】:Positive lookbehind or non-capturing group in POSIX ERE (Extended Regular Expressions)POSIX ERE(扩展正则表达式)中的正向后视或非捕获组
【发布时间】:2017-04-01 13:27:41
【问题描述】:

在 CSV 文件中,有几行与此类似:

<iframe src="https://player.vimeo.com/video/30342373" width="640" height="364" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

我想从这些行中提取30342373,它位于vimeo.com/video/" 之间。我在mawk 中尝试了以下正则表达式:

vimeo\.com\/video\/[^"]*

正在捕获:vimeo.com/video/30342373

如果我没记错的话,mawk 只支持 POSIX ERE 语法,类似于egrep

如何仅从行中捕获唯一的视频 id 部分?

【问题讨论】:

    标签: regex awk regex-lookarounds capturing-group lookaround


    【解决方案1】:
    $ awk '{gsub(/.*vimeo.com\/video\/|".*/,"")}1' file
    30342373
    

    【讨论】:

      【解决方案2】:

      sed 更容易:

      str='<iframe src="https://player.vimeo.com/video/30342373" width="640" height="364" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>'
      
      sed 's~.*\.vimeo\.com/video/~~; s~" .*~~' <<< "$str"
      
      30342373
      

      这个sed 首先删除从开始到vimeo.com/video/ 的所有内容,然后删除从" 到结束的所有内容,从而只剩下唯一的ID。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-05
        • 2021-01-30
        • 1970-01-01
        • 2018-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多