我怎么能(在Ubuntu下)从string中获得第一个整数,并保存该整数到一个新的文本文件在bash?
echo $line | tr -cd [:digit:] >> $line-num.txt
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