从bash使用txt文件获取第一个整数

我怎么能(在Ubuntu下)从string中获得第一个整数,并保存该整数到一个新的文本文件在bash

这行是在我正在使用的bash循环中…

echo $line | tr -cd [:digit:] >> $line-num.txt 

我的string看起来像这样…

321个#somewords-和numbers32452352


这是导致这个…

32132452352

我怎样才能得到321作为输出。

谢谢

使用纯粹的BASH:

 line='321#somewords-and-numbers32452352' [[ "$line" =~ ^[^0-9]*([0-9]+) ]] && echo "${BASH_REMATCH[1]}" 321 

或者使用sed

 sed 's/^[^0-9]*\([0-9]\+\).*$/\1/' <<< "$line" 321 
 echo 'abc321#somewords-and-numbers32452352' | grep -oP '^[^0-9]*\K[0-9]+' 

输出:

 321

使用sed和字符串匹配返回字符串中的第一个数字。

echo $line | sed -e 's/^[^0-9]*\([0-9][0-9]*\).*/\1/'

正则表达式[^0-9]*的第一部分是删除任何非数字前导字符(如果存在)。

bash参数扩展

 s="321#somewords-and-numbers32452352" t=${s%%[^[:digit:]]*} # remove trailing non-digits t=${t##*[^[:digit:]]} # remove leading non-digits, if any echo "$t" 
 321