三剑客之grep

Posted guge-94

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三剑客之grep相关的知识,希望对你有一定的参考价值。

工作原理

  grep命令在一个或多个文件中查找某个字符模式,如果这个模式中包含空格,就必须用引号把它括起来。grep命令中,模式可以是一个被引号括起来的字符串,也可以是单个词。位于模式之后的所有单词都被视为文件名。grep将输出发送到屏幕,它不会对输入文件进行任何修改或变化。grep返回的退出状态为0,表示成功。退出状态为1,表示没有找到。如果找不到指定的文件,退出状态为2。模式可以使用正则表达式。

  grep可以支持常见的所有正则表达式,如:基础正则、扩展正则及Perl正则;通过对相应参数的调整来指定使用的正则表达式,也叫做grep的衍生,如:grep使用-e参数就将grep变成egrep,使用-f参数就将grep变成fgrep;当然也可以关闭正则表达式功效。

 

语法

grep [OPTION]... PATTERN [FILE]...

 

参数

支持的正则

描述

-E,--extended-regexp 开启扩展正则模式,相当于使用egrep命令
-F,--fixed-strings 关闭正则表达式,将PATTERN看做字符串直接匹配
-G,--basic-regexp 默认,开启基本正则表达
-P,--perl-regexp 开启perl兼容正则模式,利用perl语言中的正则匹配,表示我不会,因此不涉及
-e,--regexp=PATTERN 该选项针对"-",由于grep默认不支持pattern中包含"-" 的匹配。使用-e可以避免报错。
-f,--file=FILE 将PATTERN写入指定文件,通过该选项,可调用文件中的PATTERN去匹配目标文件
-i,--ignore-case 匹配时,忽略大小写进行
-w,--word-regexp 将PATTERN视为一个单词(前后不是非字母就是一个结束),相当于PATTERN中加入了 " \\bPATTERN\\b"去定界。
-x,--line-regexp 模式匹配整行
-v,--invert-match 排除PATTERN,显示剩余没有被匹配到的内容行

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

正则请参考https://www.cnblogs.com/guge-94/p/10678890.html

 

提高性能的选项

描述

-c,--count PATTERN成功匹配到内容的次数
-r,--recursive 递归查询匹配目录子文件,当目标文件类型为目录时;-R选项是-r的链接方式
-s, --no-messages 不输出错误信息
-m,--max-count=NUM 匹配到内容的最大输出行数,如三行包含PATTERN,只输出两行,即可-m 2
-n,--line-number 显示行号
-H,--with-filename 输出文件名,在行内容前,当目标文件为多个时,默认
-h,--no-filename 不输出文件名
-o,--only-matching 只输出被PATTERN匹配到的内容,而非默认输出整行内容
-q,--quiet 不输出正常信息
-L 当grep目标文件是多个文件时,结果会输出“文件名:匹配行内容”的形式。-L则只将不包含匹配行的文件名输出。和-v类似。

 

 

 

 

 

 

 

 

 

 

 

 

内容行控制 描述
--color 设置高亮方式及颜色,可以用never|always|auto 来实现
-B,--before-context=NUM 打印匹配的前几行
-A,--after-context=NUM 打印匹配的后几行
-C,--context=NUM 打印匹配的前后几行

 

 

 

 

 

 

 

 

 

 

 

示例

1、输出b文件中在a文件相同的行

grep -f a b

 

2、输出b文件中在a文件不同的行

grep -v -f a b

 

3、匹配多个模式

echo "a bc de" |xargs -n1 |grep -e a -e bc

 

4、去除空格http.conf文件空行或开头#号的行

grep -E -v "^$|^#" /etc/httpd/conf/httpd.conf

 

5、匹配开头不分大小写的单词

echo "A a b c" |xargs -n1 |grep -i a

 

6、只显示匹配的字符串

echo "this is a test" |grep -o is

 

7、输出匹配的前五个结果

seq 1 20  |grep -m 5 -E [0-9]2

 

8、统计匹配多少行

seq 1 20  |grep -c -E [0-9]2

 

9、匹配b字符开头的行

echo "a bc de" |xargs -n1 |grep ^b

 

10、匹配de字符结尾的行并输出匹配的行

echo "a ab abc abcd abcde" |xargs -n1 |grep -n de$

 

11、递归搜索/etc目录下包含ip的conf后缀文件

grep -r 192.167.1.1 /etc --include *.conf

 

12、排除搜索bak后缀的文件

grep -r 192.167.1.1 /opt --exclude *.bak

 

13、排除来自file中的文件

grep -r 192.167.1.1 /opt --exclude-from file

 

14、匹配41或42的数字

seq 41 45 |grep -E 4[12]

 

15、匹配至少2个字符

seq 13 |grep -E [0-9]2

 

16、匹配至少2个字符的单词,最多3个字符的单词

echo "a ab abc abcd abcde" |xargs -n1 |grep -E -w -o [a-z]2,3

 

17、匹配所有IP

ifconfig |grep -E -o "[0-9]1,3\\.[0-9]1,3\\.[0-9]1,3\\.[0-9]1,3"

 

18、打印匹配结果及后3行

seq 1 10 |grep 5 -A 3

 

19、打印匹配结果及前3行

seq 1 10 |grep 5 -B 3

 

20、打印匹配结果及前后3行

seq 1 10 |grep 5 -C 3

 

21、不显示错误输出

grep -s a abc

 

22、不显示正常输出

grep -q a a.txt

 

23、在Gzip压缩文件中搜索内容

zgrep -i error /var/log/syslog.2.gz

以上是关于三剑客之grep的主要内容,如果未能解决你的问题,请参考以下文章

linux12shell编程 --> 三剑客之grep命令

Linux三剑客之grep

文本三剑客之grep

文本处理三剑客之 grep

三剑客之grep

三剑客之grep