在bash脚本中拆分字符串

时间:2011-10-25 00:16:12

标签: regex bash

  

可能重复:
  Split string based on delimiter in bash?

我有一堆名为test<numbers or letters>.<number>.out的文件,如test1.1024.outtest2.2.out。有没有什么方法可以使用像^test.*?..(.*).out$这样的正则表达式来解析每个文件的中间数字,然后才能访问该组?

3 个答案:

答案 0 :(得分:2)

for f in test*.out; do
  number=${f#test*.}
  number=${number%.*}
  echo $f has middle number $number
done

答案 1 :(得分:2)

sed -r 's/^test[[:alnum:]]*\.([[:digit:]]+)\.out$/\1/'

或者(BASH for循环的较短版本):

awk -F '.' '{print $2}'

答案 2 :(得分:2)

根据Bash的版本,这也可以起作用:

 test=test1.1024.out
 if [[ $test =~ ^test[A-Za-z0-9]+\.([0-9]+)\.out$ ]]; then
      echo ${BASH_REMATCH[1]}
 fi