String 使用bash从字符串中提取整数

String 使用bash从字符串中提取整数,string,bash,integer,String,Bash,Integer,我试图在这里找到解决办法,但没有找到;给定字符串,如 ABC3 DFGSS34 CVBB3 我如何提取整数以便得到 3 34 3 ??只需一个简单的sed命令即可完成此任务: sed 's/[^0-9]//g' file.txt 输出 对于仅限bash的解决方案,可以使用参数patter substation: pax$ xyz=ABC3 ; echo ${xyz//[A-Z]/} 3 pax$ xyz=DFGSS34 ; echo ${xyz//[A-Z]/} 34 pax$ xyz=C

我试图在这里找到解决办法,但没有找到;给定字符串,如

ABC3
DFGSS34
CVBB3
我如何提取整数以便得到

3
34
3

??

只需一个简单的sed命令即可完成此任务:

sed 's/[^0-9]//g' file.txt
输出
对于仅限bash的解决方案,可以使用参数patter substation:

pax$ xyz=ABC3 ; echo ${xyz//[A-Z]/}
3
pax$ xyz=DFGSS34 ; echo ${xyz//[A-Z]/}
34
pax$ xyz=CVBB3 ; echo ${xyz//[A-Z]/}
3

它与
sed
解决方案非常相似,但其优点是不必再进行另一个过程。这对于小作业来说可能并不重要,但我曾经遇到过这样的情况,即对文件的许多行执行这种操作,而非分叉是一个显著的速度提升。

使用
tr
如何

for s in ABC3 DFGSS34 CVBB3 ; do
    tr -cd 0-9 <<<"$s"
    echo
done
ABC3 DFGSS34 CVBB3中的s的
;做

tr-CD0-9那么
grep
版本呢

grep -o '[0-9]*' file.txt

这并没有考虑到给定字符串中可能存在其他非字母数字字符,例如
()[]{}$等。它不应该更好地阅读
echo${xyz/[^0-9]/}
来提取“除了整数什么都没有”?grep-o'[0-9][0-9]*'文件。txt@Mahdi:对于此特定用例,这是不必要的。但总的来说你是对的。为什么不用grep-o“[0-9]\+”而不是grep-o'[0-9][0-9]*'来表示分数,例如:123.43?既然问题是提取整数,那么这就是答案。对于浮点运算,需要一个不同的解决方案。从注释部分回答新问题是不合适的。如果你发一个问题,那么我一定会尽力回答。
grep -o '[0-9]*' file.txt