我做了一个重新编码我的mp3文件的脚本(avconv),我想添加一个检查(如果我尝试重新编码为我选择的相同比特率,脚本必须跳过该文件)
所以,使用avconv,我可以做到:
avconv -i mp3test.mp3 2>&1 |grep Audio|tail -c 09
输出是:
[before 8 there's a space] 80 kb/s
或者可能是:
128 kb/s
将输出与脚本变量进行比较的最佳方法是什么? (if / then / elif?)
if [ $VAR1 = " 80 kb/s" ] ; then
我猜用sed或awk来捕获最后的数字值?
答案 0 :(得分:1)
尝试使用以下命令提取最后一个字符串128或80 kb / s。
sed 's/.*\ \(.*\) kb\/s/\1\ kb\/s/g'
OR
sed 's/.*\ \(.*\)\ \(.*\)/\1\ \2/g'
示例:
$ echo "[before 8 there's a space] 80 kb/s" | sed 's/.*\ \(.*\) kb\/s/\1\ kb\/s/g'
80 kb/s
$ echo "[before 8 there's a space] 80 kb/s" | sed 's/.*\ \(.*\)\ \(.*\)/\1\ \2/g'
80 kb/s
答案 1 :(得分:1)
好吧,考虑到您已将输出分配给变量,比如var
,如果您只想检测变量中是否存在给定信息,则可以使用匹配:
$ if [[ ${var} =~ "80 kb/s" ]]; then ...; else ...; fi
甚至grep
:
$ if [[ $(grep -c "80 kb/s" <<< ${var}) -ge 1 ]]; then ...; else ...; fi
但是,如果您需要提取匹配的模式,对于第一种情况,您可以从比较中转储匹配,如:
$ [[ ${var} =~ "80 kb/s" ]] && echo ${BASH_REMATCH}
80 kb/s
或者,对于grep
:
$ grep -o "80 kb/s" <<< ${var}
80 kb/s
修改强>: 如果您有任意值,后面跟随“kb / s”,并且您想要使用这些值执行操作,您可以这样做:
$ var="[before 8 there's a space] 80 kb/s"
$ [[ ${var} =~ ([0-9]*)" kb/s" ]] && value=${BASH_REMATCH[1]}
$ [[ $value -ge 75 && $value -le 85 ]] && echo "$value kb/s in range 75-85 kb/s"
80 kb/s in range 75-85 kb/s