对于命令,
amixer get PCM playback
我的输出是这样的:
"Simple mixer control 'PCM',0
Capabilities: pvolume penum
Playback channels: Front Left - Front Right
Limits: Playback 0 - 255
Mono:
Front Left: Playback 255 [100%] [0.00dB]
Front Right: Playback 255 [100%] [0.00dB]"
现在我需要变量值“100%”;那么,我该如何解析呢?
我得到了[100
:
amixer get PCM playback | grep "\[" | cut -d '%' -f1 | awk '{print $5}'
答案 0 :(得分:2)
首先,示例输出中有两个100%
个数字;你想要哪个?如果它们始终为100%
,那么您只需指定var=100
,因此有时可能会小于100%
。
看起来有点像sed
,例如:
amixer get PCM playback | sed -n '/.*\[\([0-9]*\)%].*/s//\1/p'
sed
命令应该在两行输出上给你两个数字,左前方的值在右前方。
您使用Command Substitution收集sed
变量中的输出:
playback=$(amixer get PCM playback | sed -n '/.*\[\([0-9]*\)%].*/s//\1/p')
这将在playback
中给出两个数字。您可能更喜欢使用数组:
playback=( $(amixer get PCM playback | sed -n '/.*\[\([0-9]*\)%].*/s//\1/p') )
现在你可以使用:
left=0
right=1
echo "Left = ${playback[$left]}"
echo "Right = ${playback[$right]}"
这假设您使用bash
作为shell。
答案 1 :(得分:2)
这是一种方法。
将左侧值存储在变量left
left=$(amixer get PCM playback | awk -F"[%[]" '/Left:/ {print $2}')
将正确的值存储在变量right
right=$(amixer get PCM playback | awk -F"[%[]" '/Right:/ {print $2}')
或者将这两个数据存储在变量db
db=$(amixer get PCM playback | awk -F"[%[]" '/dB/ {print $2}')
echo "$db"
100
100
答案 2 :(得分:1)
使用Gnu grep和Perl正则表达式,前瞻性和后瞻性,你可以得到左扬声器的值
grep -Po '(?<=Left: Playback 255 \[)[^]]*(?=%\])'