Extract number from a line with awk/sed
awk, linux, regex, sed
Solution
Here is one approach with `awk`:
$ awk '/tbr/{print $1}' RS=, file
25
29.97
Explanation:
By default `awk` treats each line as a record, By setting `RS` to `,` we set the record separator to a comma. The script looks at each record and prints the first field of any record that matches `tbr`.
A `GNU grep` approach that uses positive lookahead:
$ grep -Po '[0-9.]+(?= tbr)' file
25
29.97
Problem
I have this string: ``` Stream #0:0: Video: vp6f, yuv420p, 852x478, 1638 kb/s, 25 tbr, 1k tbn, 1k tbc ``` and I would like to extract `25` from it. I use: ``` sed -r 's/.+([0-9]{2} tbr).+/\1/' ``` and it returns what I need. Anyway, if instead I encounter a string like ``` 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 ``` It won't return what I need anymore. I tried different alternate ways so the value for `tbr` is returned in both cases but couldn't find the right expression.