从与AWK / SED的线提取数(Extract number from a line with a

2019-08-31 08:04发布

我有这个字符串:

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在这两种情况下返回,但找不到合适的表情。

Answer 1:

这里是一个办法awk

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

说明:

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


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

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


Answer 2:

如果你调整的正则表达式有点您当前的SED命令可以将工作做好:

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


文章来源: Extract number from a line with awk/sed