如何从Shell中的字符串中有效地解析数字?

时间:2013-12-12 20:02:17

标签: shell parsing

例如,如果我有以下字符串:

I ate [ 6 ] chicken wings and [ 5 ] dishes of salad today.

我想从此字符串中解析65,以分别存储到两个变量AB。我正在考虑使用[]作为分隔符,然后缩小到用空格分隔..我正在寻找更简单的解决方案。感谢。

2 个答案:

答案 0 :(得分:0)

带有perl正则表达式的

grep -o

line="I ate [ 6 ] chicken wings and [ 5 ] dishes of salad today."
n=( $( echo "$line" | grep -oP '(?<=\[ )\d+(?= \])' ) )
a=${n[0]} b=${n[1]}

您也可以直接使用n数组:

for num in "${n[@]}"; do echo $num; done

答案 1 :(得分:0)

使用“sed”替换所有带空格的非数字并让shell使用空格作为分隔符,你可以很容易地做到这一点:

LINE="hi 1 there, 65 apples and 73 pears"
for i in $(echo $LINE | sed -e "s/[^0-9]/ /g" )
do
   echo $i
done
1
65
73

当然,您也可以将“i”指定给您想要的任何变量,或者您可以创建一个数字数组并打印出来:

LINE="hi 1 there 65 apples and 73 pears"
nums=($(echo hi 1 there 65 apples and 73 pears | sed -e "s/[^0-9]/ /g" ))
echo ${nums[@]}
1 65 73