一、自述
我叫grep,是同你们一样,生活在都市里。每天做着重复的事,忙碌着。
说起来这个好笑,我生活的国家叫Bourne-Again Shell,因为我国来往人多,大家读者不便,于是心口不一的叫它“bash”。bash,呵呵,好像被狠狠的砸了一下。
眼前这座烂尾楼便是我藏身的地方,它叫/bin,这里的居民都是上班族,那天下班后我数了一下用户,发现114个住户!天哪,好一座危楼!
在这个国家每家每户都供奉着一尊雕像,它叫root,对了,我和我的家人(group)都属于它,无理由的信奉着它,对它无怨无悔的奉献。不信你看:
也许你留意了,我还是个10后,理应被呵护,但是没办法,咳咳,还是每天要工作
好了,也许你不喜欢我的blabla,让我告诉你一个有趣的,就是我的工作。
自打我从娘胎里出生,我就被一个叫man的人口普查局记录了,我的所有信息都被他们管理,也许是天赋异禀,我天生就有寻踪访迹的能力,而且异常强大,任何楼里任何人有骚动,root都会过来找我,说,喂,给我查一下/etc小区里/passwd大楼里cla的信息!
我把所有的情报无偿的给root,博得他莞尔一笑,结果他头也不回,拿着情报走了。
而在这个bash世界里,你所依赖的就是叫hash的hit值,所获得多报酬就多,反之,则..
今天13个值,可以勉强凑合一天了。
二、死党和超能力
嗯,突然忘了提一个死党,他是我的邻居,他叫fgrep,人们曾经特别拥戴他,爱称他叫快搜侠。只不过有一次执行火速的工作时,线索很零散,会用到尽是些类似( \. \* \+), fgrep发现自己无法进入/etc/passwd大厦里精确查找,他愣在当场,不知所措,root一个大嘴巴把他从云彩扇到沟里了。poor guy....
至于我,grep,天生就具有一种叫做“REGULAR EXPRESSIONS”的超能力,他们就爱称这种超能力叫做“正则表达式”,如果当时我在现场, 一定可以根据
( \. \* \+)这些尤物来完成那个火速任务,可惜,历史不能假设。
三、阳春白雪 != globbing
其实,我干的最多的活儿就是穿梭于各个目录楼宇(/)之间对每个房间进行寻踪,至于有一次root让我做一种叫globbing的工作,让我找出一个藏匿于/tmp大通铺下的一个叫pddd.txt的bad guy,我死活找不到,即便root怎么指使我。
我只能拿着这个1的结果灰头土脸的给root,于是似乎他放弃了让我使用这种叫globbing的东西,我想迄今我还有用的应该是超能力REGULAR EXPRESSIONS。
四、超能力使用手册
以下是我的超能力的几种使用方法,
1、我可以把一个不确定的因素转化成“ ." 没错这个红色的小药丸让我可以把任何人留下的字符理解成.
2、[] []是个很神奇的东西,是一个让我可以从里面取任何人留下的任何数字和字母,不管你是0-9还是a-z抑或是A-Z,
我会把[0123456789]的东西看做任何一个,只要你要,我就可以取出这样的一个。
[[:digit:]] 被我识别成任意“一个”数字
[[:alpha:]] 被我识别成任意“一个”字母
[[:alnum:]] 任意“一个”数字或字母
[[:space:]] 任意“一个”空格
[[:punct:]] 任意“一个”标点符号
甚至我还可以根据[[:upper:]]找出任意一个大写字母
[[:lower:]]找出任意一个小写字母
我还支持这个逻辑:caret 即 ^ 脱字符,把它加入任意的范围,我就能取出反向查找。
3、对于重复
当我在工作时,通常是要抓紧时间的,所以下面几个小东西就帮了我大忙,它们会对前面一个字符重复,提高我的工作效率
3-1 ?
对于前面一个字符可以不重复,或者重复一次。
3-2 +
对于前面一个字符可以重复一次,或者许许多多次。
3-3 *
对于前面一个字符可以重复任意次。
甚至我可以辨认{ }这种格式,举个例子吧
假设你要重复前面的字符最少2次,最多3次。
也可以使用\{2,\3},我也会辨别。
!!!!由于出生设定,在你使用一些特殊字符进行次数重复的时候,必须在符号前面加入“ \ ”表示转义,方便我辨识。
加上限制,没错,我可以支持。
假如条件要求在行的行首,加入"^"符号,若在行尾可以在"$"。这里就有个小技巧
假如你要我找出空白的行,可以使用"^$",这样就能表示空白!
看!的确有这个行存在!在第39行,很神奇,不是么?
还有一种限制的方法,我支持"\<"和"\>",它们表示在一个词的词首和词尾做限制
假定我要在/etc/passwd里明确找出cla这个家伙的信息,here we go:
对于一些组,我有我的办法
假定我要取出一行头尾词组的相同的方法
可以使用\(\)的方法!
五、biohazrd基因突变
自从那天root给我注射了一种叫-E的血清,致使我一时无法摆脱,霎时间难辨真伪。它叫extended!当我带着这个状态工作时,我可以忽视"\"这个障碍,久而久之,我发现它另一个古怪的地方,我可以进行“或”的方法了!
但是至今还有无法突破\<,\>这两个大关,当我要做词首词尾限定时,仍然使用\。也许就是血清的副作用吧。
这就是黑夜里我的工作方式,穿梭在都是1/0的大街,翱翔在bash的世界里。说不定在这个我每天游走的世界,还有一个跟我长得很像的兄弟......甚至是否还是两个跟我一样拥有“超能力”的人呢?
grep前传之侠影之谜 (Grep begins)