免费注册 查看新帖 |

Chinaunix

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

文件名匹配的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-03 12:13 |只看该作者 |倒序浏览
5可用积分
问题1、我要查找当前目录中 包含数字的文件,
1、为什么[1-9]要用单引号括起来?
2、为什么'[1-9]*'.txt与[1-9]'*.txt的匹配模式执行效果一样?
3、为什么同样的加了‘单引号的匹配模式’在ls命令后的匹配模式就不对,为什么?同样是文件的匹配啊!

[root@zhiguo test]# ls
123.txt
234.txt
456.txt
567.txt
abc.txt


[root@zhiguo test]# find ./ -name [1-9]*.txt
find: 路径必须在表达式之前
Usage: find [-H] [-L] [-P] [path...] [expression]

[root@zhiguo test]# find ./ -name '[1-9]*'.txt
./234.txt
./456.txt
./567.txt
./123.txt

[root@zhiguo test]# find ./ -name '[1-9]'*.txt
./234.txt
./456.txt
./567.txt
./123.txt

[root@zhiguo test]# find ./ -name '*[1-9]'*.txt
./234.txt
./456.txt
./567.txt
./123.txt
[root@zhiguo test]#

Ls命令验证
[root@zhiguo test]# ls [1-9]*.txt
123.txt
234.txt
456.txt
567.txt


[root@zhiguo test]# ls *[1-9]*.txt
123.txt
234.txt
456.txt
567.txt


[root@zhiguo test]# ls '[1-9]*'.txt
ls: 无法访问 [1-9]*.txt: 没有那个文件或目录
[root@zhiguo test]#

问题2、单引号与双引号在匹配模式下的区别?
[root@zhiguo test]# ls "[1-9]*".txt
ls: 无法访问 [1-9]*.txt: 没有那个文件或目录
[root@zhiguo test]#

[root@zhiguo test]# ls '[1-9]*'.txt
ls: 无法访问 [1-9]*.txt: 没有那个文件或目录
[root@zhiguo test]#

最佳答案

查看完整内容

1. 这是regular expression。2. 上面的现象和执行的命令对regular expression的支持有关。3. 请看具体工具的。manpage。

论坛徽章:
0
2 [报告]
发表于 2008-04-03 12:13 |只看该作者
1. 这是regular expression。
2. 上面的现象和执行的命令对regular expression的支持有关。
3. 请看具体工具的。manpage。

论坛徽章:
0
3 [报告]
发表于 2008-04-03 12:54 |只看该作者
原帖由 swordfish.cn 于 2008-4-3 12:22 发表
1. 这是regular expression。
2. 上面的现象和执行的命令对regular expression的支持有关。
3. 请看具体工具的。manpage。


谢谢啊!
我想问的就是正则表达式中单引号的作用。

你看,如果有一个?123.txt文件,我要查找此文件的话是这样:
ls \?*.txt
或者 ls '?'*.txt
也就是说\and ''将特殊字符转化为普通字符对吧?

问题就在这里
find ./ -name '[1-9]'*.txt
难道说要将[1-9]当成一个具体文件名来查找?按照“特殊字符转化为普通字符”这个意思,我要查找带数字的文件应该这样才对啊:
find ./ -name [1-9]*.txt

论坛徽章:
0
4 [报告]
发表于 2008-04-03 13:01 |只看该作者
建议看一下shell相关的东西,如abs。
看其中转义和引用。

论坛徽章:
0
5 [报告]
发表于 2008-04-03 14:14 |只看该作者
原帖由 志国 于 2008-4-3 12:54 发表


谢谢啊!
我想问的就是正则表达式中单引号的作用。

你看,如果有一个?123.txt文件,我要查找此文件的话是这样:
ls \?*.txt
或者 ls '?'*.txt
也就是说\and ''将特殊字符转化为普通字符对吧?

...


看第3条。

论坛徽章:
0
6 [报告]
发表于 2008-04-08 21:48 |只看该作者
1、加了单引号,shell对单引号内的内容不作解释,直接传给find命令
   如果不加单引号,参数中如果含有[]*?等,shell将其匹配成一个或多个文件名后再传给命令去处理;但如果匹配不成功才原封不动地传给命令

2、'[1-9]*'.txt:shell对单引号内的内容不处理,由find得到的参数是[1-9]*.txt
      '[1-9]'*.txt:shell对'[1-9]'不解释,试图匹配[1-9]*.txt,其中*是通配符,[]是普通这符,由于匹配不成功(因为当前止目录下没有[1-9]jkkh.txt这样的文件),shell也将通匹符*传给find,find得到的参数是[1-9]*.txt

3、ls命令不处理通配符,是shell处理好通配符后将文件名传给ls。如果加了单引号,shell及ls都不处理,就没人处理了。
      


 
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP