用bash删除字符串前的所有内容?

时间:2017-12-11 16:09:49

标签: bash awk sed ffmpeg

我正在使用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足够强大,但似乎不是这样。

有什么想法吗?

4 个答案:

答案 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
相关问题