![从变量中提取特定值](https://linux22.com/image/972906/%E4%BB%8E%E5%8F%98%E9%87%8F%E4%B8%AD%E6%8F%90%E5%8F%96%E7%89%B9%E5%AE%9A%E5%80%BC.png)
我只是想知道如何从 shell 脚本中的变量中提取值。以下是代码:
var=Volume: 0: 100% 1: 100%
或者
var=Volume: 0: 35% 1: 35%
我想从变量中提取 100 或 35 个依赖值并将其存储到另一个变量中。所以我该怎么做呢?
答案1
我认为你的目标有点误导,所以我做了我希望做的事情,将值分成单独的值。
var="Volume: 0: 70% 1: 12%"
source <(echo "$var" | grep -oP '\d+\: \d+' | sed -r 's/([0-9]+)\: /vol\1=/g')
因此,对于每个输入量,都会vol#
创建一个变量。在上面的例子中,echo $vol1
将是70
,并且echo $vol2
给出12
。
如果var="Volume: 0: 70% 1: 12% 2: 12% 3: 41% 4: 19%"
,你最终会得到五个独立的变量。
答案2
我认为这就是你要找的命令,
sed 's/.*\ \(.*\)%.*/\1/g'
例子:
$ echo 'var=Volume: 0: 35% 1: 35%' | sed 's/.*\ \(.*\)%.*/\1/g'
35
$ echo 'Volume: 0: 35% 1: 35%' | sed 's/.*\ \(.*\)%.*/\1/g'
35
$ var="Volume: 0: 35% 1: 35%"
$ echo $var | sed 's/.*\ \(.*\)%.*/\1/g'
35
此命令将显示第一个数字35
或100
第一个 % 标记之前的数字。
答案3
如果:
var="Volume: 0: 100% 1: 100%"
然后:
首先提取
100
你可以使用:temp=$(awk -F": |%" '{print $3}' <<< "$var")
最后提取
100
可以使用:temp=$(awk -F": |%" '{print $5}' <<< "$var")
要提取两者,
100
您可以使用:temp=$(awk -F": |%" '{print $3, $5}' <<< "$var")