shell编程怎么抽取匹配正则表达式的字符串?

比如说现在有一个字符串 helloworld20140501.txt 我想从中读取这里面的20140501这一段然后把它赋给其他变量,能否用正则表达式来完成这样的工作呢?如果可以的话,应该怎么做?好像一般用grep只能匹配整行是吗?
我最初的目的是想重命名一批文件,从原文件名里面抽取出表示日期的数字,然后进行处理后作为新文件名。修改

a=$( expr 'helloworld20140501.txt' : '.*\([0-9]\{8\}\).*' )
echo $a
linux shell 中可以将命令的结果赋值给变量,$(命令)这种格式将返回命令执行后的结果字符串
上面命令执行后,变量a的值是20140501
a=`echo 'helloworld20140501.txt'|sed 's/.*\([0-9]\{8\}\).*/\1/'`
这个命令作用也是一样,变量a被赋值为20140501追问

嗯,受教了,多谢!
另外请问有没有专门讲这些的教材呢?我看了一些讲shell编程的书,里面没有提到expr命令的用法。。

追答

linux命令起码成百上千,每个命令最少有十来个参数,一本书肯定讲不完,只有用时多看man文档
如果只是学习文本处理的话,有本书好像名字是 “sed&awk"之类的,可以参考一下

温馨提示:答案为网友推荐,仅供参考
相似回答