使用 bash 命令提取字符串中的第 n 个数字

extract nth number in a string using bash commands

运行下面命令得到0271,有没有办法分别得到0、27、1?

echo '!    ibrav = 0, nat = 27, ntyp = 1' | sed -r 's/[^1-9]*//g'

使用 grep 而不是 sed-o 选项只打印匹配的部分,每个匹配项单独占一行。

echo '!    ibrav = 0, nat = 27, ntyp = 1' | grep -E -o '[0-9]+'

输出:

0
27
1

我发现这种方法适用于 bash 和 make 环境。假设;

VAR='!    ibrav = 0, nat = 27, ntyp = 1'

bash:

echo $(VAR) | grep -Po '(nat = \d+)')

制作:

$(eval NUM := $(shell echo $(VAR) | grep -Po '(nat = \d+)'))