在命令输出中查找数字并将其保存为变量

nab*_*elj 3 bash string

在 bash 脚本中,我希望从命令的输出中获取一些数字并将它们存储在变量中。命令输出示例:

25 results [22 valid, 2 invalid, 1 undefined]
Run Code Online (Sandbox Code Playgroud)

我想将前一个命令输出中的四个数字保存为名为results, valid, invalid, undefined.

Kus*_*nda 7

由于您想存储多个单独的值,我假设您想将它们存储在一个数组中:

$ str='25 results [22 valid, 2 invalid, 1 undefined]'

$ readarray -t arr < <( grep -E -o '[0-9]+' <<<"$str" )
Run Code Online (Sandbox Code Playgroud)

这会将 的输出读grep入一个名为 的数组arr。该grep命令将$str通过将扩展的正则表达式[0-9]+与字符串进行匹配并提取每个匹配项来输出在其自己的行中找到的每个单独的数字。 grep从“here-string”中readarray读取字符串,并grep使用进程替换读取结果。

然后可以将这些值用作

$ printf 'value: %s\n' "${arr[@]}"
value: 25
value: 22
value: 2
value: 1
Run Code Online (Sandbox Code Playgroud)

或者,看个别值,使用例如"${arr[0]}""${arr[1]}"等该数组包含"${#arr}"的值。

results=${arr[0]}
valid=${arr[1]}
invalid=${arr[2]}
undefined=${arr[3]}
Run Code Online (Sandbox Code Playgroud)

直接从命令读取:

readarray -t arr < <( mycommand | grep -E -o '[0-9]+' )
Run Code Online (Sandbox Code Playgroud)