免费注册 查看新帖 |

Chinaunix

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

请教: 正则表达式 实验中遇到的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-25 13:47 |只看该作者 |倒序浏览
Linux命令参考大全中
  第七章 正则表达式介绍 中关于 * 号的用法。
讲到:
使用此特殊字符*匹配任意字符或字符串的重复多次表达式。例如:
compu*t
将匹配字符u一次或多次:
computer
computing
compuuuuute
---------------------我的实验---------------------
在文件夹中建立了:compuaabte  computer  computing  compuuaaute  compuuuute  五个普通文件。
使用
[root@]#ls | grep compu*t   
computer
computing
compuuuute
的确出现了正确结果。
使用ls | grep pu*t 也出现相同结果。
但  ls | grep u*t 命令时就显示了
compuaabte
computer
computing
compuuaaute
compuuuute

然后实验使用: ls | grep comp*t 或者 ls | grep mp*t  无显示。
当使用  ls | grep p*t 时又显示了全部。
-----------------------实验结论-----------------------------
我的结论:1.在*号前有两个以上字符时,表示对前一个字符的多次重复。
             2.在*号前只有一个字符时,表示匹配任意字符。

-----------------------我的疑问-----------------------------
疑问:1.以上结论是正确的吗?
        2.以上结论是只适用于grep命令吗?


----------------------另一个例子----------------------------
10133*
匹配
101333
10133

实验:
建立 10133    101333    1013444  三个普通文件。
执行 ls | grep 10133*  但是却无显示。
------------------------------------------------------------
疑问:3.为什么以上命令无结果呢?难道*后至少需要1个字符?

        4.支持正则表达式的命令? 文档上说有grep和sed命令。还有awk语言。

谢谢指点。

论坛徽章:
0
2 [报告]
发表于 2008-10-25 13:58 |只看该作者
继续实验:
test文件夹中含有8个普通文件。
10133   101344444   computer   compuuaaute
101333  compuaabte  computing  compuuuute

[root@localhost test]# ls | grep 1013*.
10133
101333
101344444
与上贴的相比,难道*号后加个点时,*号就为匹配任意字符了?

[root@localhost test]# ls compu*t
ls: compu*t: 没有那个文件或目录
[root@localhost test]# ls 1013*3
10133  101333
[root@localhost test]# ls 10*3
10133  101333

推测在ls命令中,*号只为匹配任意字符。没有重复前个字符多次的作用。

为什么ls中,字母中的*和数字中的*还不一样??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP