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
^$
:匹配空白行;单词锚定:由非特殊字符组成的连续的字符串
\<
:锚定词首,也可用\b
1
2\<PATTERN, 或\bPATTERN
grep "\<sh" /etc/passwd\>
:锚定词尾,也可以用\b
1
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开头的行;用三种方式; |