我正在使用ffmpeg:
ffmpeg -i /Users/petaire/GDrive/Taff/ASI/Bash/testFolder/SilenceAndBlack.mp4 -af silencedetect=d=2 -f null - 2>&1 | grep silence_duration
我的输出是:
[silencedetect @ 0x7f9e6940eba0] silence_end: 25.92 | silence_duration: 25.936
但我只想保留持续时间编号,所以我试图删除最后一个数字之前的所有内容。
我从未理解过sed / awk& co,所以我不知道最好的方法是什么。我认为grep足够强大,但似乎不是这样。
有什么想法吗?
答案 0 :(得分:3)
使用awk打印最后一个字段:
$ awk '{print $NF}'
测试它:
$ echo "[silencedetect @ 0x7f9e6940eba0] silence_end: 25.92 | silence_duration: 25.936"| awk '{print $NF}'
25.936
或使用sed
将所有内容替换为最后一个空格:
$ ... | sed 's/.* //'
答案 1 :(得分:3)
您可以将grep命令更改为
grep -oP '(?<=silence_duration: )\S+'
将打印搜索到的字段的下一个字段。
答案 2 :(得分:2)
删除最后一个号码前的所有内容 你可以用
grep -o "[^ ]*$"
答案 3 :(得分:1)
另一个选项,grep -o
cut
:
$ echo '[silencedetect @ 0x7f9e6940eba0] silence_end: 25.92 | silence_duration: 25.936' \
| grep -o 'silence_duration: [0-9]*\.[0-9]*' | cut -d ' ' -f 2
25.936