我有这个字符串:
Stream #0:0: Video: vp6f, yuv420p, 852x478, 1638 kb/s, 25 tbr, 1k tbn, 1k tbc
我想从中提取25
。
我用:
sed -r 's/.+([0-9]{2} tbr).+/\1/'
然后它返回我需要的东西。
无论如何,如果我遇到像
这样的字符串Stream #0:0(eng): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 11981 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 30k tbc
它不会再回复我需要的东西了。
我尝试了不同的替代方法,因此在两种情况下都会返回tbr
的值,但找不到正确的表达式。
答案 0 :(得分:13)
以下是awk
的一种方法:
$ awk '/tbr/{print $1}' RS=, file
25
29.97
<强>解释强>
默认情况下,awk
会将每一行视为一条记录。通过将RS
设置为,
,我们将记录分隔符设置为逗号。该脚本查看每条记录并打印与tbr
匹配的任何记录的第一个字段。
使用positive lookahead的GNU grep
方法:
$ grep -Po '[0-9.]+(?= tbr)' file
25
29.97
答案 1 :(得分:4)
如果你稍微调整正则表达式,你当前的sed命令会运行良好:
sed -r 's/.+ (\S+) tbr,.+/\1/'