用awk / sed从一行中提取数字

我有这个string:

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/' 

它返回我所需要的。

无论如何,如果相反,我遇到一个string

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

Solutions Collecting From Web of "用awk / sed从一行中提取数字"

下面是awk一个方法:

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

说明:

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


使用积极向上的 GNU grep方法:

 $ grep -Po '[0-9.]+(?= tbr)' file 25 29.97 

如果你调整了正则表达式,你当前的sed命令将工作得很好:

 sed -r 's/.+ (\S+) tbr,.+/\1/'