grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
grep的工作方式
1、在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
2、首先创建一个演示文档用于后续对 grep 命令的讲解演示:
3、在单个文件中搜索特定的字符串,输出为包含特定字符串的文本行
4、在多个文件中检索指定的字串,输出为包含特定字符串的文件名和文本行
5、为了演示需要先将刚才的演示文档复制一份。输出的文本行前面会加上相应的文件名。
6、利用 grep -i 进行大小写无关的搜索
7、将忽略大小写的区别,这样的话,字符串“the”,“The”和“THE”都将被搜索。
8、使用用正则表达式
9、例如,要搜索全部以“lines”开始以“empty”结束的字串,如搜索“lines[之间任意字]empty”,并且忽略大小写:
10、正则表达式遵循的几个重复的操作:. ? 最多匹配一次. * 匹配零次或者任意多次. + 匹配一次以上. {n} 匹配n次. {n,} 最少匹配n次. {,m} 最多匹配m次. {n,m} 匹配n到m次
11、用 grep -w 搜索整个词,而不是词中的部分字符串搜索包含单词为“is”的文本行,当然包含“his”, “this” 等的文本行将忽略:
12、利用 grep -A -B -C 显示所匹配的文本行的前/后/前后一些行内容对于一些大型文件,不仅显示所匹配的文本行,而且显示之前/之后/前后的一些文本行也是很有用的。为演示需要,先创建另一个演示文档:
13、1、显示匹配行之后的行 -A(After)
14、例如,显示匹配行之后的三行内容(空行也算):
15、2、显示匹配行之前的行 -B(Before)
16、例如,显示匹配行之前的两行内容(空行也算):
17、3、显示匹配行前后的行 -C例如,显示匹配行前后的各两行内容(空行也算):
18、高亮显示匹配的内容需要设置 GREP_OPTIONS 环境变量:
19、然后再进行搜索。
20、利用 grep -r 在目录中递归搜索如果在目录中即有文件又有目录,则普通的搜索只搜索文件而不搜索目录,利用 -r 选项即可递归进行搜索,搜索目录下的所有文件及其子目录内的文件
21、利用 grep -v 搜索不包含特定字符串的文本行例如显示所有不包含字符串“go”的文本行:
22、显示不包含所有几个特定字符串的文本行
23、利用grep -c统计所匹配的字符串数目
24、例如:
25、查找有多少行匹配字符串:
26、查找有多少行不匹配字符串:
27、利用 grep -l 只显示包含特定字符串的文件名称
28、利用 grep -o 只显示所匹配的字符串默认的搜索显示的是匹配的文本行的所有内容,但是如果想只显示所搜的特定字符串,则就要使用 -o 选项了。乍看起来只显示所匹配的字符串好像用处不大,但在使用正则表达式的搜索中很有用处。
29、显示特定字符串的具体位置
30、例如:
31、利用 grep -n 同时显示行号