GREP规则表达式特殊字符,其实和其他表达式的字符形式差不多。
^ 行起始固定点,就是匹配行起始为该样式的行 要用/ / 来包括,例如/^hello/,就是匹配以hello开头的行
$ 行结尾固定点 和^一样的用法,就是位置不同
. 匹配一个字符 同样要用/ / 来包括,/he..o/匹配 中间任意两个字符
* 匹配任意多个任意字符
[] 匹配在集合中的任意一个 也是用//来包括
[^] 匹配不在集合中任的一个 同上
/< 匹配字的起始固定点 ‘/<hello’ 匹配有hello开始的字
/> 匹配字的结尾固定点 ‘hello/>’ 匹配有 hello结束的字,本来这两个命令在书上看是要用//来扩住的,可是怎么试都不行,结果在网上找了一下,是用’ ’扩起来的,我晕,不知道是不是和SHELL 的版本和类型有关。
/(…/) 匹配字的标记 例如/(hello/) 在书上说明是这样的,在被标记的部分做标记,并保存起来,被记为数字1,以后若要参考,用/1来重复这个样式。能够使用到9个标记,第一个标记是由样式的最左边开始算起。例如,样式hello被保存在缓存且以后用/1来参考。
其实这个鸟命令我没看懂。他说是保存在缓存里,是不是字SHELL结束缓存就没有了?还是一直保存在内存中,直到父SHELL结束?还是怎么样?
我调用了
#the file is
#hello
#HELLO hello
#hello world
Grep /(hello/) myfile hello 应该用/1标记,也就是说用/1也可以匹配hello
但是我再调用
Grep /1 myfile 结果SHELL没鸟我,没什么结果。。。。。。。这个问题非常严重,过后再弄下.
x/{m/} 重复x字符m次 ,要用’ ’扩起来注意,匹配的是连续的! 例如o/{5/}就是重复o5次的意思。
x/{m,/} 和上面的意思差不多,唯一的不同就是匹配至少m次。
x/{m,n/} 用法同上,不同点就是匹配x字符至少m次但是不超过n次。
在grep中使用pipe
比如说
我由一下文件
myfile
yourfile
hisfile
herfile
$ls –l | grep ‘myfile’
则输入myfile 对应的信息
也就是将前半段输入的结果由管道送给grep,再对myfile进行查找
但是,对于文件内部查找的结果由管道送给grep再查找貌似不行
加入
Myfile 文件中如下
hello
hello world
HELLO WORLD
Hello World
$grep ‘hello’ myfile | grep ‘world’
意图是用grep查找由hello的行,再将输入由管道送给下一个grep处理,再在输入的匹配的行中查找有world匹配的行
理想的结果是
hello world
但是经过试验,输出的结果是
world
hello world
这个是为什么呢??我也不知道·········有待解决
grep 选项(并非所有的UNIX版本都支持相同的选项)
-n 选项 在被找到样式的每一行加上行号,不用多说,就是加数字在匹配行前面,但是要注意,加的数字不是顺序1,2,3,4,5,6……而是根据匹配行所在文件的实际行来加
比如
grep –n ‘hello’ myfile
输出假设是
1 hello
5 hello world
说明hello 和hello world在myfile分别是1、5行
-i 选项 忽略大小写,没必要废话吧
-vin 选项 打印出所有不包含样式的行,而该样式忽略大小写,也就是说,比如
grep –vin ‘ab’ myfile
也就是 Ab aB ab AB 都将不被打印
-l 选项 只打印出被找到样式的文件名,而不打印出所在的行,也不用多说,在哪个文件就打印哪个文件。
-c选项 打印出有几行出现所查找的样式。注意,是打印出有几行匹配该样式,而不是有多少个该样式。
例如:
grep –c ‘hello’ *
输出结果是
myfile1:2
myfile2:5
myfile3:7
myfile4:0
意思是:在myfile1 myfile2 myfile3 中分别有2行5行7行匹配hello,而myfile4没有匹配的,注意,如果没有匹配的也会被打印出来,只是后面数字是0,表示没有匹配。
-w 选项 匹配整个字的样式
例如
grep –w ‘hello’ myfile
则只会打印出匹配 hello 的行,而不会打印出hello111,hello2222 helloworld….之类的行
在书中看到这样一个选项
grep –vi
不知道干什么的·····················································
大概学到的grep就是这些,也有很多不理解的地方和很多没有看到的地方,有机会的话再看看吧。
我觉得最值得注意的是,每个命令都应该确切知道是干什么的,比如grep就是查找匹配样式并打印出该行。
针对我自己来说,可能是学的不太上心,看到后面,前面的好多都忘记了,用法忘记也就算了,选项含义忘记也算了,最恶劣的是竟然有些命令是用来干什么的也忘记了。这也是促使我回头来复习的原因,就当吸取教训了,以后要注意。