免费注册 查看新帖 |

Chinaunix

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

请教一个弱智问题,在线。。  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-02-24 18:06 |只看该作者 |倒序浏览
echo "$YN" | grep -q '^[Yy]\([Ee][Ss]\)*$'
我在“网中人“的一片文档中,看到上面这个命令,想请问:为什么左括号和右括号前为什么要加反斜线,我估计是为了让shell不把它当成元字符来使用,但是加这个括号有用吗?
这样不行吗?echo "$YN" | grep -q '^[Yy][Ee][Ss]*$'

论坛徽章:
0
2 [报告]
发表于 2004-02-24 19:18 |只看该作者

请教一个弱智问题,在线。。

[quote]原帖由 "happyman1"][/quote 发表:
珂儿 该用户已被删除
3 [报告]
发表于 2004-02-26 20:44 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2004-02-26 21:57 |只看该作者

请教一个弱智问题,在线。。

我的认为,"\"是用来做转义的,本来"("和""在'^[Yy]\([Ee][Ss]\)*$'
是会被当作普通字符,现在"("和""有了特殊的用法,表示[Ee][Ss]可选,即YN为YES,YEs,Yes,YeS,yes,yEs,yES,yeS,y,Y时,echo "$YN" | grep -q '^[Yy]\([Ee][Ss]\)*$' 均可匹配,呵呵

论坛徽章:
0
5 [报告]
发表于 2004-02-26 22:29 |只看该作者

请教一个弱智问题,在线。。

那时为了记忆匹配模式用的

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
6 [报告]
发表于 2004-02-27 01:13 |只看该作者

请教一个弱智问题,在线。。

我的理解,括号是和后面的*号相关的。括号中的所有内容作为一个匹配项处理,*表示匹配0或任意次,在这里改用?(匹配0或1次)更为准确。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-02-27 13:50 |只看该作者

请教一个弱智问题,在线。。

嗯... r2007  兄的是正解。

不過,linux 的 grep 抓不到 ? (0 or 1)這個 modifier ...
除非加上 -E 參數或改用 egrep 才行。
不過,在 egrep 中,那麼 ( ) 這對括號就不需要用 \ 作 escape 處理了...
例:
grep -E '[Yy]([Ee][Ss])?$'

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-02-27 14:01 |只看该作者

请教一个弱智问题,在线。。

此外,再補充一下:

1) shell meta 與 Regular Expression 的 meta 是不同層次的。
本例而言,在 command line 中的 meta 已全被 hard quoe (單引號)全關閉了,因此 RE 中的 meta 再用 escape charactor (反斜線)來關...

2) RE 的基本元數是由 Char_Set 與 Modifier 構成。
在 char_set 部份,( ) 可以作集合之用。如:
abc 是三個 char_set ,分別為 a, b, c
a(bc) 是兩個 char_set ,分別為 a, bc
(abc) 是一個 char_set ,只有 abc

而 modifier 本身的存在是沒甚麼意思的,只是用來修改其"左邊最後一個"char_set 。
常用 modifier 如下:
* : 0 or more
? : 0 or one
+ : one or more
{m,n} : m to n

換而言之:
abc* 是修改 c ,也就是 c 可以為 0 或多個...
a(bc)* 是修改 bc ,也就是 bc 可以為 0 或多個...
(abc)* 是修改 abc ,也就是 abc 可以為 0 或多個...
換作其它 modifer 亦同解...

p.s.
本來,這原本是我要在 shell 十三問的最後的附加題要跟大家講的內容,
只是,我希望有其他對 RE 更了解的同好出來說明更好...   ^_^

论坛徽章:
0
9 [报告]
发表于 2004-02-29 12:15 |只看该作者

请教一个弱智问题,在线。。

原帖由 "網中人" 发表:

1) shell meta 與 Regular Expression 的 meta 是不同層次的。
本例而言,在 command line 中的 meta 已全被 hard quoe (單引號)全關閉了,因此 RE 中的 meta 再用 escape charactor (反斜線)來關...
meta已经被hard quote 关了,怎么还需要反斜线呢?不明白啊啊!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2004-02-29 22:00 |只看该作者

请教一个弱智问题,在线。。

shell meta 在 command line 上用(請問你對 command line 如何定議的?)
RE meta 在 RE 中使用(請問你對 RE 的部份如何劃分)。
又,不同的 program 有不同的處理方式,何不看 man 或問作者呢?

最後,建議先看:
http://bbs.chinaunix.net/forum/viewtopic.php?p=1511745#1511745
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP