本文属贫僧不吃肉原创,欢迎转载,转载请注明出处 http://never-say-never.iteye.com/blog/851514
1.相关背景
1.1 Filter(过滤器),是指一些程序,他们从标准输入读取数据,对数据进行操作,然后将产生的结果输出到标准输出。他们是非交互的,即没有提示或等待输入。
1.2检索过滤器: grep 、 fgrep 、 egrep
这些命令检索与target或pattern相匹配的文本,我们可以用它们从文件中提取信息、从一个命令的输出数据中检索与某一项相关的行为以及查找包含特定单词的文件。
1.3 区别
grep:最常用。可以检索目标(一个或多个单词或正则表达式)
fgrep(fixed grep):不能使用正则表达式,可以检索多个目标,等同于grep –f
egrep(extended grep):支持更丰富的正则表达式,而且支持多目标检索,他比grep快得多,等同于grep -e。
2.grep基本用法
2.1从一个或多个文件中检索包含某个target的行,然后打印所有匹配的行。
先打开一个文件看一下内容
$ cat daily_log
just for myself
I just love u
end
在这个文件里查找包含“just”的行
$ grep just daily_log
just for myself
I just love u
2.2 grep检索含空格的短语
$ grep “just love” daily_log
I just love u
注意:如果just和love出现在不同的行,grep就不会匹配它们,因为grep一次只检索一行。
2.3当只记得关键字,不记得文件名的时候,怎么办呢?
$ grep just *
daily_log: just for myself
daily_log: I just love u
other_file: just unix
3.grep的一些常用通道
3.1 grep是区分大小写的
$ grep –i JUST daily_log 和 $ grep –i just daily_log 不同
说明:使用-i(ignore case)可以忽略字母大小写
3.2 grep -n列出检索目标所在的行号(line-number)
$ grep –n just daily_log
1: just for myself
2: I just love u
3.3 grep –l (list)不打印匹配的行,而打印包含目标的文件名
$ grep –l just *
daily_log
other_file
3.4 转换方向(-v),转换方向是grep挺有意思的一个实现,即和正常情况相反,grep输出未包含target的行或文件
$ grep –v just daily_log
end
$ grep –v end daily_log
just for myself
I just love u
3.5 grep –c ,统计匹配的行总数(count),不显示行信息
$ grep –c just daily_log
2
$ grep –c end daily_log
1
参考文献:
1. “UNIX手册”之类的名字吧,在图书馆看的,忘了名字,后来也没找到书。
2.《Linux常用指令速查手册》,杨艳玲,化学工业出版社
3.《UNIX实用教程第五版》,Paul K. Andersen, 人民邮电出版社