从变量中提取特定值

从变量中提取特定值

我只是想知道如何从 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

此命令将显示第一个数字35100第一个 % 标记之前的数字。

答案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")
    

相关内容