免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 5460 | 回复: 44
打印 上一主题 下一主题

问 :关于 [a-z] 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-15 00:27 |只看该作者 |倒序浏览
我想找出当前目录下不是以小写字母开头的所有文件

  1. [root@dns1 test]# ll
  2. 总用量 0
  3. -rw-r--r--    1 root     root            0 12月 14 23:05 12
  4. -rw-r--r--    1 root     root            0 12月 14 23:06 A
  5. -rw-r--r--    1 root     root            0 12月 14 23:05 a12

  6. [root@dns1 test]# ll [!a-z]*
  7. -rw-r--r--    1 root     root            0 12月 14 23:05 12
  8. [root@dns1 test]#

  9. [root@dns1 test]# echo $LANG
  10. zh_CN.GB18030
  11. [root@dns1 test]#
复制代码


换到英文的环境下还是一样 :


  1. n7css@as1:/tmp/test> ll
  2. total 0
  3. -rw-rw-rw-    1 n7css    n7css           0 2006-12-15 00:02 123
  4. -rw-rw-rw-    1 n7css    n7css           0 2006-12-15 00:02 A
  5. -rw-rw-rw-    1 n7css    n7css           0 2006-12-15 00:02 a12

  6. n7css@as1:/tmp/test> ll [!a-z]*
  7. -rw-rw-rw-    1 n7css    n7css           0 2006-12-15 00:02 123

  8. n7css@as1:/tmp/test> echo $LANG
  9. en_US
  10. n7css@as1:/tmp/test>
复制代码


最后换到 AIX 上运行就可以了 :


  1. DB1>$ll
  2. total 24
  3. drwxr-xr-x   2 oracle   dba             512 Dec 15 00:11 .
  4. drwxrwxrwt  11 bin      bin            6656 Dec 15 00:16 ..
  5. -rw-r--r--   1 oracle   dba               0 Dec 15 00:11 123
  6. -rw-r--r--   1 oracle   dba               0 Dec 15 00:11 A12
  7. -rw-r--r--   1 oracle   dba               0 Dec 15 00:11 a

  8. DB1>$ll [!a-z]*
  9. -rw-r--r--   1 oracle   dba               0 Dec 15 00:11 123
  10. -rw-r--r--   1 oracle   dba               0 Dec 15 00:11 A12

  11. DB1>$echo $LANG
  12. en_US
  13. DB1>$
复制代码


1)为什么 [a-z] 会包含大写字母呢?

2)为什么第2和3种都是相同的语言环境,却得出不同的结果呢?

请各位大侠指教!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2006-12-15 08:24 |只看该作者
ls 支持正则表达式吗.

可能支持得不太好吧..

find . -name "[^a-z]*" -maxdepth 1
用find可以实现..

论坛徽章:
0
3 [报告]
发表于 2006-12-15 08:52 |只看该作者
不会吧,是不是你的A文件有问题?

论坛徽章:
0
4 [报告]
发表于 2006-12-15 08:59 |只看该作者
[!a-z]... 可能是 !在那里只表示符号 '!'

  1. ls |grep "^[^a-z]"
复制代码

论坛徽章:
0
5 [报告]
发表于 2006-12-15 09:27 |只看该作者
原帖由 cookis 于 2006-12-15 08:24 发表
ls 支持正则表达式吗.

可能支持得不太好吧..

find . -name "[^a-z]*" -maxdepth 1
用find可以实现..



谢谢。我想这个是 shell 自身的 wildcard ,不算 RE吧

不过我想用 ls 实现。

我昨天查了 winnger 版主的贴子 (http://bbs.chinaunix.net/viewthr ... p;extra=&page=2),

也有提到相同的例子

[ 本帖最后由 ailms 于 2006-12-15 09:37 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2006-12-15 09:27 |只看该作者
原帖由 li2002 于 2006-12-15 08:52 发表
不会吧,是不是你的A文件有问题?


touch A 而已,会有什么问题呢?

论坛徽章:
0
7 [报告]
发表于 2006-12-15 09:30 |只看该作者
原帖由 awk就是awp加ak 于 2006-12-15 08:59 发表
[!a-z]... 可能是 !在那里只表示符号 '!'

  1. ls |grep "^[^a-z]"
复制代码


《learning bash 3th》1.6.2 有给出解释 :

[!set]
Any character not in set


如果是你说的那样,为什么下面的可以呢?


  1. n7css@as1:/tmp/test> find . -name "[!a-z]*"
  2. .
  3. ./A
  4. ./123
  5. n7css@as1:/tmp/test>
复制代码


[!a-z] 应该是 shell 先扩展后再送给 ls 或者 find 的,所以我不太认可前面某位朋友关于 ls 支持正则表达式

不够的观点。再说为什么放到 AIX 上就可以呢?

[ 本帖最后由 ailms 于 2006-12-15 09:35 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2006-12-15 09:40 |只看该作者
shell中"ls"命令不区分字符大小写。
  1. ~/Incoming$ ls
  2. 1  1.txt  a  D  d.txt  D.txt
  3. ~/Incoming$ ls [!a-z]
  4. 1
  5. ~/Incoming$ ls [a-z]
  6. a  D
  7. ~/Incoming$ ls [!a-z]*
  8. 1  1.txt
  9. ~/Incoming$ ls [a-z]*
  10. a  D  d.txt  D.txt
复制代码

在[x-y]中。。。  这个结构可能有些特殊

[ 本帖最后由 helo_aBiNg 于 2006-12-15 10:17 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-12-15 09:43 |只看该作者
[quote]原帖由 helo_aBiNg 于 2006-12-15 09:40 发表
shell中"ls"命令不区分字符大小写。
  1. ~/Incoming$ ls
  2. 1  1.txt  a  D  d.txt  D.txt
  3. ~/Incoming$ ls [!a-z]
  4. 1
  5. ~/Incoming$ ls [a-z]
  6. a  D
  7. ~/Incoming$ ls [!a-z]*
  8. 1  1.txt
  9. ~/Incoming$  ... [/quote]

  10. 谢谢。

  11. 对于这点我更加不能认同了。unix 本身就是区分大小写的,只有 windows 才这样作。

  12. [code]
  13. n7css@as1:/tmp/test> ll
  14. total 0
  15. -rw-rw-rw-    1 n7css    n7css           0 2006-12-15 00:02 123
  16. -rw-rw-rw-    1 n7css    n7css           0 2006-12-15 00:02 A
  17. -rw-rw-rw-    1 n7css    n7css           0 2006-12-15 00:02 a12
  18. n7css@as1:/tmp/test> touch a
  19. n7css@as1:/tmp/test> ll a
  20. -rw-rw-rw-    1 n7css    n7css           0 2006-12-15 09:42 a
  21. n7css@as1:/tmp/test>
复制代码

论坛徽章:
0
10 [报告]
发表于 2006-12-15 09:47 |只看该作者
原帖由 ailms 于 2006-12-15 09:30 发表


《learning bash 3th》1.6.2 有给出解释 :



如果是你说的那样,为什么下面的可以呢?

[code]
n7css@as1:/tmp/test> find . -name "[!a-z]*"
.
./A
./123
n7css@as1:/tmp/test> ...


各种工具、不同shell,支持的regexp都不一样的,像 [!a-z] ,很多工具都不支持~
你看看下面这几句:
echo "abc" |sed 's,[!a],,'
echo "abc" |sed 's,[^a],,'
echo "abc" |grep "[^z]"
echo "abc" |grep "[!z]"
...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP