grep命令详解

grep简介

Linux grep 命令用于查找文件里符合条件的字符串。 grep
指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep
指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
语法
grep[-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][–help][范本样式][文件或目录…]
参数:
a 或 --text : 不要忽略二进制的数据。
-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c 或 --count : 计算符合样式的列数。
-C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
-E 或 --extended-regexp : 将样式为延伸的普通表示法来使用。
-f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F 或 --fixed-regexp : 将样式视为固定字符串的列表。
-G 或 --basic-regexp : 将样式视为普通的表示法来使用。
-h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
-i 或 --ignore-case : 忽略字符大小写的差别。
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
-L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
-o 或 --only-matching : 只显示匹配PATTERN 部分。
-q 或 --quiet或–silent : 不显示任何信息。
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
-s 或 --no-messages : 不显示错误信息。
-v 或 --revert-match : 显示不包含匹配文本的所有行。
-V 或 --version : 显示版本信息。
-w 或 --word-regexp : 只显示全字符合的列。
-x --line-regexp : 只显示全列符合的列。
-y : 此参数的效果和指定"-i"参数相同。
grep模式
[[:upper:]]——[A-Z]
[[:lower:]]——[a-z]
[[:digit:]]——[0-9]
[[:alnum:]]——[0-9a-zA-Z]
[[:space:]]——空格或Tab
[[:alpha::]]——[a-zA-Z]
正则表达式
\:忽略正则表达式中特殊字符的原有含义
^:匹配正则表达式的开始行
$:匹配正则表达式的结束行
<:从匹配正则表达式的行开始
>:到匹配正则表达式的行结束
[ ]:单个字符,如[A],A符合要求
[-]:范围,如[A-C],A,B,C都符合要求
.:所有的单个字符
*:所有字符,长度可以为0
用法实例
1.“*”前一个字符匹配 0 次,或任意多次
[root@localhost ~]# grep “a*” test_rule.txt
如果正则表达式是“aaa*”,则会匹配最少包含两个连续 a 的字符串,如:
[root@localhost ~]# grep “aaa*” test_rule.txt
he never saaaid those words.
because,actuaaaally,
如果正则表达式是“aaaaa*”,则会匹配最少包含四个个连续 a 的字符串,如:
[root@localhost ~]# grep “aaaaa*” test_rule.txt
because,actuaaaally,
2.“.” 匹配除了换行符外任意一个字符 正则表达式“.”只能匹配一个字符,这个字符可以是任意字符,举个例子:
[root@localhost ~]# grep “s…d” test_rule.txt Mr.
Li Ming said:
Later,Mr. Li ming soid his hot body.
#“s…d”会匹配在 s 和 d 这两个字母之间一定有两个字符的单词
[root@localhost ~]# grep “s.*d” test_rule.txt
Mr. Li Ming said:
he never saaaid those words.
Later,Mr.
Li ming soid his hot body.
#最后一句话比较有意思,匹配的是“soid his hot bod”
“[]” 匹配中括号中指定的任意一个字符,只匹配一个字符
[root@localhost ~]# grep “s[ao]id” test_rule.txt
而“[0-9]”会匹配任意一个数字,如:
[root@localhost ~]# grep “[0-9]” test_rule.txt
“\” 转义符
[root@localhost ~]# grep “.$” test_rule.txt
【grep命令详解】“\{n\}”表示其前面的字符恰好出现 n 次
[root@localhost ~]# grep “a{3}” test_rule.txt

    推荐阅读