如何在Bash中从字符串中仅获取数字值

3

我有一个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命令?


请提供一个字符串的示例。 - iruvar
<mu value="100" /> 但是它可能会有所不同,例如value和等号之间可能会有空格。 - rizvaughan
3个回答

4

使用以下egrep命令:

egrep -o '[0-9]+'

1
或者在上下文中 grep -i "mu" file.xml | grep -Eo '[0-9]+' - tripleee

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

您不需要在数据文件本身中命名列。它们应该在文件名中。


0

你可以选择从输入中删除所有非数字的内容。

tr -cd '[:digit:]' 

或者对于浮点数

tr -cd '[:digit:].'    

谢谢,这对我有用,但是我不太熟悉[:digit:] - rizvaughan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接