linux命令之-grep文本搜索工具
1、grep命令详解
1.1、命令介绍
- Global search REgular expression and Print out the line. 文本搜索工具,根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索,显示能匹配到的行;linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

1.2、正则表达式:REGular EXPression REGEXP
- 是由元字符及正常字符所书写的模式,其中的元字符不表示字符本身的意义,而是用于表达控制或通配等功能;
- 基本正则表达式命令: grep
提示:fgrep: fast, 不支持使用正则表达式
1.2.1、基本正则表达式元字符
提示:匹配数字别忘了中括号外面还有一个中括号。
字符匹配:
.:匹配任意单个字符[]: 匹配指定范围内的任意单个字符[^]: 匹配指定范围外的任意单个字符[0-9],[[:digit:]],[^0-9],[^[:digit:]][a-z],[[:lower:]][A-Z],[[:upper:]][[:space:]][[:punct:]][0-9a-zA-Z],[[:alnum:]][a-zA-Z],[[:alpha:]][:alnum:]字母数字[a-z A-Z 0-9][:alpha:]字母[a-z A-Z][:blank:]空格或制表键[:cntrl:]任何控制字符[:digit:]数字[0-9][:graph:]任何可视字符(无空格)[:lower:]小写[a-z][:print:]非控制字符[:punct:]标点字符[:space:]空格[:upper:]大写[A-Z][:xdigit:]十六进制数字[0-9 a-f A-F]次数匹配:在期望匹配字符后面提供一个控制符,用于表达匹配其前面字符指定的次数
*: 任意长度,表示0次、1次或多次;1
2
3例子:"ab*c"
abbc, ac
abb,.*: 任意长度的任意字符提示:工作于贪婪模式
\?:0次或1次;表示其左侧字符可有可无1
2
3例子:"ab\?c"
abbc,
ac, abc\+: 1次或多次;表示其左侧字符至少出现1次;1
2
3例子:"ab\+c"
ac,
abc, abbbbc\{m\}:m次;表示其左侧字符精确出现m次;1
2
3例子:ab\{2\}c
ac, abc, abbbc
abbc\{m,n\}:至少m次,至多n次;1
2
3例子:ab\{0,3\}c
ac, abbbc,
abbbbbc\{0,n\}:至多n次;
\{m,\}:至少m次;位置锚定:
^:锚定行首1
例子:^PATTERN
$:锚定行尾1
列子:PATTERN$
^PATTERN$:用模式来匹配整行;1
列子:grep "^[[:space:]]*$" /etc/rc.d/rc.sysinit
^$:匹配空白行;单词锚定:由非特殊字符组成的连续的字符串
\<:锚定词首,也可用\b1
2\<PATTERN, 或\bPATTERN
grep "\<sh" /etc/passwd\>:锚定词尾,也可以用\b1
PATTERN\>, 或PATTERN\b
\<PATTERN\>:匹配PATTERN能匹配到的整个单词1
ifconfig | grep "\<[0-9]\{2\}\>"
分组:
注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符,可以被grep记忆(保存于内置的变量中,这些变量是\1, \2, …),因此,还可以被引用;
\1: 引用,模式中自左而右,由第一个左括号以及与之对应的右括号中的模式所匹配到的内容;
\1: 引用 ,模式中自左右,由第二个左括号以及与之对应的右括号中的模式所匹配到的内容1
2
3
4
5
6
7
8
9
10
11
12
13例子:
“\(a.b\).*\1"
amb hello anb
"\(l..e\).*\1"
He like his lover.
He like his liker.
She love her lover.
She love her liker.
\(.*\)\.mp3.*\1\.wvm
play.php?a.mp3?search?a.wmv
play.php?where.mp3?hello?when.wmv
1.3、扩展的正则表达式
- 扩展正则表达式: grep -E, egrep
1.3.1、扩展正则表达式元字符
字符匹配:
.:匹配任意单个字符[]: 匹配指定范围内的任意单个字符[^]: 匹配指定范围外的任意单个字符[0-9],[[:digit:]],[^0-9],[^[:digit:]][a-z],[[:lower:]][A-Z],[[:upper:]][[:space:]][[:punct:]][0-9a-zA-Z],[[:alnum:]][a-zA-Z],[[:alpha:]][:alnum:]字母数字[a-z A-Z 0-9][:alpha:]字母[a-z A-Z][:blank:]空格或制表键[:cntrl:]任何控制字符[:digit:]数字[0-9][:graph:]任何可视字符(无空格)[:lower:]小写[a-z][:print:]非控制字符[:punct:]标点字符[:space:]空格[:upper:]大写[A-Z][:xdigit:]十六进制数字[0-9 a-f A-F]次数匹配:
*: 任意次?:0或1次+: 至少1次{m}:精确匹配m次;{m,n}:至少m次,至多次;{m,}:至少m次;{0,n}:至多次;位置锚定:
^
$
\<,\b
\>,\b分组:
()
引用:\1,\2,...或者:
a|b:a或者b或者两侧的所有内容;命令:
grep -E PATTERN FILE...
egrep PATTERN FILE...
2、grep命令常用语法
1 | grep命令: |
3、grep命令练习
3.1、普通正则表达式练习
1 | 1、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式; |
3.1、扩展正则表达式练习
1 | 1、显示/proc/meminfo文件中以大写或小写S开头的行;用三种方式; |