POSIX ERE(扩展正则表达式)中的正后视或非捕获组
Positive lookbehind or non-capturing group in POSIX ERE (Extended Regular Expressions)
在一个 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 部分?
使用 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。
$ awk '{gsub(/.*vimeo.com\/video\/|".*/,"")}1' file
30342373
在一个 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 部分?
使用 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。
$ awk '{gsub(/.*vimeo.com\/video\/|".*/,"")}1' file
30342373