Chinaunix

标题: shell下正则表达式写法咨询 [打印本页]

作者: dulingqiang    时间: 2012-02-15 17:36
标题: shell下正则表达式写法咨询
请教各位,在shell下用正则表达式怎样写能筛选出下面这样的文件列表:

epcisqhpremdayhis10.mdp
epcisqhpremdayhis11.mdp
epcisqhpremdayhis12.mdp
epcisqhpremdayhis13.mdp
epcisqhpremdayhis14.mdp
epcisqhpremdayhis15.mdp
epcisqhpremdayhis16.mdp
epcisqhpremdayhis17.mdp
epcisqhpremdayhis18.mdp
epcisqhpremdayhis19.mdp
epcisqhpremdayhis1.mdp
epcisqhpremdayhis20.mdp
epcisqhpremdayhis21.mdp
epcisqhpremdayhis22.mdp
epcisqhpremdayhis23.mdp
epcisqhpremdayhis24.mdp
epcisqhpremdayhis25.mdp
epcisqhpremdayhis26.mdp
epcisqhpremdayhis27.mdp
epcisqhpremdayhis28.mdp
epcisqhpremdayhis2.mdp
epcisqhpremdayhis3.mdp
epcisqhpremdayhis4.mdp
epcisqhpremdayhis5.mdp
epcisqhpremdayhis6.mdp
epcisqhpremdayhis7.mdp
epcisqhpremdayhis8.mdp
epcisqhpremdayhis9.mdp
epcisqhpremdayhis.mdc
作者: dulingqiang    时间: 2012-02-15 17:40
补充一下文件名的特征,前面的字符一致,后面有1-2位数字,后缀为mdc或mdp
作者: vsyour    时间: 2012-02-15 17:40
echo epcisqhpremdayhis*.mdp

作者: yangkyo821    时间: 2012-02-15 17:50
本帖最后由 yangkyo821 于 2012-02-15 17:51 编辑

卜一卦
  1. while read a
  2. do
  3. [[ "$a" =~ epcisqhpremdayhis[0-9]{1,2}.md[cp] ]] && echo "$a"
  4. done < file
复制代码

作者: blackold    时间: 2012-02-15 18:12
回复 2# dulingqiang


    应该是通配符吧。
作者: abc163635    时间: 2012-02-15 19:03
  1. ls | grep "epcisqhpremdayhis[0-9]\{1,2\}.md[cp]"
复制代码

作者: alan9101    时间: 2012-02-15 19:29
ls | sed -n '/[a-z]\+[0-9]\+\.md[cp]/p'
作者: cooluncle    时间: 2012-02-15 20:10
本帖最后由 cooluncle 于 2012-02-16 09:07 编辑

find <path>  -regex ".*/epcisqhpremdayhis[0-9]\.\(mdp\|mdc\)$" -o -regex ".*/epcisqhpremdayhis[0-9][0-9]\.\(mdp\|mdc\)$"   -type f
作者: zooyo    时间: 2012-02-15 20:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: blackold    时间: 2012-02-15 22:30
回复 9# zooyo


    分开写。
作者: blackold    时间: 2012-02-15 22:34
回复 1# dulingqiang


    如果是 bash 的 path name expansion, extglob on:
  1. ls epcisqhpremdayhis?([0-9])?([0-9]).md[cp]
复制代码

作者: hardie    时间: 2012-02-16 08:53
  1. grep 'epcisqhpremdayhis[0-9]\{0,2\}\.md[c|p]' file
复制代码

作者: dulingqiang    时间: 2012-02-16 10:38
大家提供的方法好几种验证在bash下支持是报错的

abc163635 这个基本符合需求,不过还有个小问题,有些文件名中不含数字的,还是没查出来

abc163635 发表于 2012-02-15 19:03

作者: blackold    时间: 2012-02-16 10:53
回复 13# dulingqiang


    是不是选项没有打开呢?
bash:
  1. $ ls file*.txt
  2. file.txt  file1.txt  file22.txt  filefoo.txt

  3. $ shopt extglob
  4. extglob         on

  5. $ ls file?([0-9])?([0-9]).txt
  6. file.txt  file1.txt  file22.txt
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2