如何从bash中的字符串中获取数值

时间:2013-11-22 17:04:37

标签: linux bash shell sed

我有一个xml文件,我想从文件中的字符串中只提取数值。我想出的解决方案之一是

cat file.xml |grep -i "mu "| grep -o '[0-9]'

但我得到每个数字用新行分隔,例如100,我得到1然后是新行,然后是0等等。我想出的另一个解决方案是

cat file.xml |grep -i "mu "|cut -d ' ' -f 4| tr '=' ' '|cut -d ' ' -f2|tr '""' ' '|sed -e 's/^ *//g' -e 's/ *$//g'

我的问题:这个问题是否有一个更简单的解决方案,我从一行中得到一个数字值而不关心字段而不使用cuttr命令?

3 个答案:

答案 0 :(得分:4)

使用此egrep:

egrep -o '[0-9]+'

答案 1 :(得分:0)

您拥有的一个选项是删除输入中不是数字的所有内容

tr -cd '[:digit:]' 

或浮动数字

tr -cd '[:digit:].'    

答案 2 :(得分:0)

我个人鼓励避免使用XML作为格式;至少为你自己使用。您可以使用以下内容代替“< mu value =”100“/>” -

# Name your data file ma-me-mo-mu.txt

100+200+300+400

然后: -

while IFS='+' read ma me mo mu
do
echo "${ma}"
echo "${me}"    
echo "${mo}"
echo "${mu}"
done

您无需在数据文件本身内命名列。它们以文件名命名。