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

Ope*_*way 11 string bash integer

我试图在这里找到解决方案,但不能; 给出的字符串

ABC3
DFGSS34
CVBB3
Run Code Online (Sandbox Code Playgroud)

我怎样才能提取整数

3
34
3
Run Code Online (Sandbox Code Playgroud)

??

anu*_*ava 25

只需一个简单的sed命令即可完成工作:

sed 's/[^0-9]//g' file.txt
Run Code Online (Sandbox Code Playgroud)

OUTPUT

3
34
3
Run Code Online (Sandbox Code Playgroud)


pax*_*blo 13

对于仅限bash的解决方案,您可以使用参数模式替换:

pax$ xyz=ABC3 ; echo ${xyz//[A-Z]/}
3
pax$ xyz=DFGSS34 ; echo ${xyz//[A-Z]/}
34
pax$ xyz=CVBB3 ; echo ${xyz//[A-Z]/}
3
Run Code Online (Sandbox Code Playgroud)

它与sed解决方案非常相似,但具有不必分叉另一个进程的优点.这对于小型工作来说可能并不重要,但是我曾经遇到过这样的情况,即文件的许多行都进行了这种事情,并且非分叉是一个显着的速度提升.

  • 这没有考虑给定字符串中可能存在其他非字母数字字符,例如`()[] {}#$!.`等等.不应该更好地读取`echo $ {xyz // [ ^ 0-9] /}`而不是提取"只有整数"? (6认同)

Sor*_*gal 8

怎么用tr

for s in ABC3 DFGSS34 CVBB3 ; do
    tr -cd 0-9 <<<"$s"
    echo
done
Run Code Online (Sandbox Code Playgroud)


bmk*_*bmk 7

一个grep版本怎么样?

grep -o '[0-9]*' file.txt
Run Code Online (Sandbox Code Playgroud)