3

我有这个字符串:

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在两种情况下都返回了值,但找不到正确的表达式。

4

2 回答 2

13

这是一种方法awk

$ awk '/tbr/{print $1}' RS=, file
25
29.97

解释:

默认情况下awk将每一行视为一条记录,通过设置我们将记录分隔符设置RS,逗号。该脚本查看每条记录并打印匹配的任何记录的第一个字段tbr


一种GNU grep使用积极前瞻的方法:

$ grep -Po '[0-9.]+(?= tbr)' file
25
29.97
于 2013-04-16T13:38:19.687 回答
4

如果您稍微调整一下正则表达式,您当前的 sed 命令会运行良好:

sed -r 's/.+ (\S+) tbr,.+/\1/'
于 2013-04-16T13:45:10.800 回答