上次浅显地学习来一下find命令,现在看看另一个grep。
貌似大牛们说这两个命令用起来是很爽的,但悲剧的是我现在还毫无感觉。
grep需要注意的也是集中选项参数而已,用得比较多的还是上篇文章说到的正则表达式:
* grep:
传统的 grep 程序, 在没有参数的情况下, 只输出符合 RE 字符串之句子. 常见参数如下:
-v: 逆反模示, 只输出"不含" RE 字符串之句子.
-r: 递归模式, 可同时处理所有层级子目录里的文件.
-q: 静默模式, 不输出任何结果(stderr 除外. 常用以获取 return value, 符合为 true, 否则为 false .)
-i: 忽略大小写.
-w: 整词比对, 类似 \
.
-n: 同时输出行号.
-c: 只输出符合比对的行数.
-l: 只输出符合比对的文件名称.
-o: 只输出符合 RE 的字符串. (gnu 新版独有, 不见得所有版本都支持.)
-E: 切换为 egrep
在我看来,常用之中更常用的应该是-v,-n,-c,-l,-i,-E
* egrep:
为 grep 的扩充版本, 改良了许多传统 grep 不能或不便的操作. 比方说:
- grep 之下不支持 ? 与 + 这两种 modifier, 但 egrep 则可.
- grep 不支持 a|b 或 (abc|xyz) 这类"或一"比对, 但 egrep 则可.
- grep 在处理 {n,m} 时, 需用 \{ 与 \} 处理, 但 egrep 则不需.
我觉得egrep多了||比较好用??
查找的匹配主要是依靠正则表达式,但必须注意一个精确查找:
grep -n "48\>" data.f
在查找的内容后面加上\>
新东西,类名(之前没有见过呢)
[ [ : u p p e r : ] ] [ A - Z ] [ [ : a l n u m : ] ] [ 0 - 9 a - zA-Z]
[ [ : l o w e r : ] ] [ a - z ] [ [ : s p a c e : ] ] 空格或t a b键
[ [ : d i g i t : ] ] [ 0 - 9 ] [ [ : a l p h a : ] ] [ a - z A - Z ]
例一:取以5开头,后跟至少两个大写字母:
$grep '5[[:upper:]][[:upper:]]' data.f
取以P或D结尾的所有产品代码:
grep '[[:upper:]][[:upper:]][P,D]' data.f
对系统使用grep
比如在/etc/passwd中查找用户信息
或者和ps用管道连接
ps -aux | grep .....
这样会比较方便
说一个egrep比grep强大的地方,就是前者可以用一个文件的内容作为搜索的匹配
e g r e
p代表e x p r e s s i o n或extended grep,适情况而定。e g r e p接受所有的正则表达式, e g r e
p的一个显著特性是可以以一个文件作为保存的字符串,然后将之传给e g r e p作为参数,为此使用- f开关。如果创建一个名为g r e p
s t r i n g s的文件,并输入4 8 4和4 7:
[root@Linux_chenwy sam]# vi grepstrings
[root@Linux_chenwy sam]# cat grepstrings
484
47
[root@Linux_chenwy sam]# egrep -f grepstrings data.f
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
484 nov 7PL1996 CAD 49.00 PLV2C 234
上述脚本匹配d a t a . f中包含4 8 4或4 7的所有记录。当匹配大量模式时, - f开关很有用,而在一个命令行中敲入这些模式显然极为繁琐。
这个的关键是-f
阅读(814) | 评论(0) | 转发(0) |