LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1444|回复: 25

正则表达式的一个问题。[基本解决]

[复制链接]
发表于 2004-6-17 15:32:01 | 显示全部楼层 |阅读模式
正则表达式:

  1. [ns]a[0123456789]\.xls
复制代码

文件为:

  1. sales1.xls
  2. orders3.xls
  3. sales2.xls
  4. sales3.xls
  5. apac1.xls
  6. europe2.xls
  7. sam.xls
  8. na1.xls
  9. na2.xls
  10. sa1.xls
  11. ca1.xls
复制代码

当我使用grep(不加任何参数)选择文件,居然不能选择除任何一个。
但是当我把regexp改为[ns]a[2-9]就能选出na2.xls,当改为[ns]a[0-9]就没有任何结果。不知道是不是我使用cygwin的缘故,反正就是想不明白。
ps:当我改动[ns]a[^0-9]就能把sam.xls选出来。不明白啊?!:help
发表于 2004-6-17 16:08:30 | 显示全部楼层
wat r u talking about ?
发表于 2004-6-17 16:11:52 | 显示全部楼层
在linux上,grep [ns]a[0123456789]\.xls和grep [ns]a[0-9].xls是一样的,那个.
可以不转义.
grep (GNU grep) 2.5.1
估计是cygwin的原故吧 :ask
 楼主| 发表于 2004-6-17 16:26:11 | 显示全部楼层
谢拉,lee兄!
 楼主| 发表于 2004-6-17 16:42:01 | 显示全部楼层
自己找到答案了,不是grep版本的问题,而是pattern没有加''括住。
  1. ls | grep [ns]a[0-9]\.xls
复制代码
是不正确的。
应该是
  1. ls | grep '[ns]a[0-9].\xls'
复制代码
才是正确的。
发表于 2004-6-17 17:50:08 | 显示全部楼层
你早把上下文 (context) 说清楚就好了
知道为什么要加 quote 才行吗 ?
发表于 2004-6-17 17:59:04 | 显示全部楼层
呵呵:请比较:

  1. /home/lee/test#cat txt|grep [ns]a[0-9]\.xls
  2. na1.xls
  3. na2.xls
  4. sa1.xls
  5. /home/lee/test#cat txt|grep '[ns]a[0-9].\xls'
  6. na1.xls
  7. na2.xls
  8. sa1.xls
  9. /home/lee/test#cat txt|grep [ns]a[0-9].xls
  10. na1.xls
  11. na2.xls
  12. sa1.xls

复制代码
发表于 2004-6-17 18:21:47 | 显示全部楼层
考考你: 以下结果如何解释 ? (我用 Bash)
  1. [color=red]-(root@daisy:pts/20)-(18:15)-(~/trash/testing)-
  2. [4478 0] % [/color]ls
  3. apac1.xls  europe2.xls  na2.xls      sa1.xls     sales2.xls  sam.xls
  4. ca1.xls    na1.xls      orders3.xls  sales1.xls  sales3.xls
  5. [color=red]-(root@daisy:pts/20)-(18:15)-(~/trash/testing)-
  6. [4478 0] % [/color]ls | grep -l [ns]a[0123456789]\.xls            
  7. na2.xls
  8. sa1.xls
  9. [color=red]-(root@daisy:pts/20)-(18:15)-(~/trash/testing)-
  10. [4478 0] % [/color]
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2004-6-18 09:13:09 | 显示全部楼层
最初由 dearvoid 发表
考考你: 以下结果如何解释 ?
  1. [color=red]-(root@daisy:pts/20)-(18:15)-(~/trash/testing)-
  2. [4478 0] % [/color]ls
  3. apac1.xls  europe2.xls  na2.xls      sa1.xls     sales2.xls  sam.xls
  4. ca1.xls    na1.xls      orders3.xls  sales1.xls  sales3.xls
  5. [color=red]-(root@daisy:pts/20)-(18:15)-(~/trash/testing)-
  6. [4478 0] % [/color]ls | grep -l [ns]a[0123456789]\.xls            
  7. na2.xls
  8. sa1.xls
  9. [color=red]-(root@daisy:pts/20)-(18:15)-(~/trash/testing)-
  10. [4478 0] % [/color]
复制代码

在我这里就是不行,使用ls | grep '[ns]a[0-9]\.xls'就能选出来。
单引号究竟是什么意思??
不明白。
而且你的结果也有问题啊?少选出来一个na1.xls。这是怎么回事?
是不是加了l参数的原因,

  1. -l, --files-with-matches
  2. Suppress  normal  output; instead print the name of
  3. each input file from which  output  would  normally
  4. have  been  printed.  The scanning will stop on the
  5. first match.
复制代码
发表于 2004-6-18 09:27:21 | 显示全部楼层
呵呵, 谁能解释通, 他的 shell 才算学到家了:p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表