Chinaunix首页 | 论坛 | 博客
  • 博客访问: 318242
  • 博文数量: 82
  • 博客积分: 1530
  • 博客等级: 上尉
  • 技术积分: 771
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-16 03:44
文章分类

全部博文(82)

文章存档

2011年(6)

2010年(76)

我的朋友

分类: LINUX

2010-04-27 01:36:14

上次浅显地学习来一下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
在查找的内容后面加上\>

新东西,类名(之前没有见过呢)
QUOTE:
[ [ : 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

阅读(777) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~