设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
Linux 综合讨论区 —— LinuxSir.cn
›
Linux 基础讨论区(新手速成)
›
正则表达式中的点
返回列表
查看:
1027
|
回复:
8
正则表达式中的点
[复制链接]
ar1
ar1
当前离线
积分
27
IP卡
狗仔卡
发表于 2009-4-24 07:04:29
|
显示全部楼层
|
阅读模式
我的系统是CentOS 5
在学习中有一点搞不清楚,应该是我的概念不清吧,我把问题贴出来:
[b] ls[/b]
复制代码
ttt ttt11.txt ttt22.mp3 ttt33txt ttt.mp3
ttt11.mp3 ttt13.txt ttt23.txt ttt33.txt
用正则表达式:
[b] ls ttt[22-33]* [/b]
复制代码
结果
ttt22.mp3 ttt23.txt ttt33txt ttt33.txt
到这里没问题,但是:
[b] ls ttt[22-33].* [/b]
复制代码
结果
ls: ttt[22-33].*: No such file or directory
这里只相差一个点,为什么就不行呢?用了转移符\也是不行的。
谢谢!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
ar1
ar1
当前离线
积分
27
IP卡
狗仔卡
楼主
|
发表于 2009-4-24 08:07:27
|
显示全部楼层
如果这样则没问题:
ls ttt[22-33]?.*
但还是没能达到效果。
恐怕这个点不能跟在方括号后面,不知道是不是这样。
回复
支持
反对
使用道具
举报
显身卡
pingz
pingz
当前离线
积分
2411
IP卡
狗仔卡
发表于 2009-4-24 11:41:18
|
显示全部楼层
touch ttt[22-33].*
复制代码
然后
ls ttt[22-33].*
复制代码
……
在 ls 下正则表达式有点问题,至少在我的 fedora 下也是一样……匹配没有像我们想的那样进行。事实上"." (dot|period) 应该匹配除换行外任意的字符。
试一下
ls | grep ttt[22-33].*
复制代码
结果很有意思……
其实上, * 也不是你想的那样工作的……
参考一下:
http://zh.wikipedia.org/wiki/%E6 ... 8%E8%BE%BE%E5%BC%8F
回复
支持
反对
使用道具
举报
显身卡
ar1
ar1
当前离线
积分
27
IP卡
狗仔卡
楼主
|
发表于 2009-4-24 17:50:41
|
显示全部楼层
谢谢!
事实上 ls | grep ttt[22-33].*的效果和 ls ttt[22-33]*是一样的,呵呵。
ttt22.mp3
ttt23.txt
ttt33txt
ttt33.txt
回复
支持
反对
使用道具
举报
显身卡
ar1
ar1
当前离线
积分
27
IP卡
狗仔卡
楼主
|
发表于 2009-4-24 17:58:41
|
显示全部楼层
批量创建用花括号
touch ttt{22,33}{.,}{mp3,txt}
ls
复制代码
ttt22mp3 ttt22txt ttt33mp3 ttt33txt
ttt22.mp3 ttt22.txt ttt33.mp3 ttt33.txt
但是少了ttt23*文件
回复
支持
反对
使用道具
举报
显身卡
ar1
ar1
当前离线
积分
27
IP卡
狗仔卡
楼主
|
发表于 2009-4-24 18:03:54
|
显示全部楼层
用中括号却产生不了对应的文件
touch ttt[22-33].*
ls
复制代码
结果产生了文件
ttt[22-33].*
删除用转意符号\
rm ttt\[22-33\].\*
复制代码
rm: remove regular empty file `ttt[22-33].*'? y
回复
支持
反对
使用道具
举报
显身卡
ar1
ar1
当前离线
积分
27
IP卡
狗仔卡
楼主
|
发表于 2009-4-24 18:27:44
|
显示全部楼层
[b] ls[/b]
复制代码
ttt22mp3 ttt22txt ttt33mp3 ttt33txt
ttt22.mp3 ttt22.txt ttt33.mp3 ttt33.txt
带中括号的删除
[b]rm -f ttt[22-33].*[/b]
[b]ls[/b]
复制代码
结果没成功
ttt22mp3 ttt22txt ttt33mp3 ttt33txt
ttt22.mp3 ttt22.txt ttt33.mp3 ttt33.txt
带花括号的删除
[b] rm -f ttt{22,33}.*[/b]
[b]ls[/b]
复制代码
结果成功了
ttt22mp3 ttt22txt ttt33mp3 ttt33txt
看来这个点跟在花括号后则没问题,在中括号后却不尽人意。
回复
支持
反对
使用道具
举报
显身卡
waq
waq
当前离线
积分
1783
IP卡
狗仔卡
发表于 2009-4-25 23:48:52
|
显示全部楼层
这个其实叫做Shell的
[color="Red"]路径扩展
,与正则表达式是有很大的不同的
其中的“.”大多数情况下就表示一个点,与跟在什么后面没有关系。[22-33]实际上就是[color="Red"]
2或者3
!
所以
ls ttt[22-33].*
复制代码
可以匹配
ttt2. ttt2.txt ttt2.mp3 ttt3. ttt3.mp3 ttt3.txt
复制代码
显然这些文件你的目录中确实没有!
回复
支持
反对
使用道具
举报
显身卡
crazyflapjack
crazyflapjack
当前离线
积分
11
IP卡
狗仔卡
发表于 2009-4-28 10:05:54
|
显示全部楼层
[22-33]貌似不是Regex的写法,[] 在Regex当中是字符匹配 表示匹配[]中罗列的某一个字符。
而Regex的“.”却是代表匹配任意一个字符。
可使用ls将结果罗列,然后grep使用regex筛选所要的结果~
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表