Linux文件搜素工具(grep正则表达式)

正则表达式分为两种:
基本正则表达式:BRE basic
扩展正则表达式:ERE extend

元字符:(hello[[:space:]]+)+
Hellp[[:space:]]+ hello加空格可以出现至少一次 (hello[[:space:]]+)+ hello加空格的模式可以连续出现N

grep: Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式的元字符及文本字符所编写出的过滤条件;

正则表达式模式的实现或者能够搜索正则表达式都要用到正则表达式引擎

正则表达式引擎;

grep [OPTIONS] PATTERN [FILE…] PATTERN 模式 grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…] 可以把模式写到一个文件中通过-f读取,然后对 file进行过滤

grep命令选项:
-i:ignorecase,忽略字符的大小写;
-o:仅显示匹配到的字符串本身;
-v, --invert-match:显示不能被模式匹配到的行;
-E:支持使用扩展的正则表达式元字符;
-q, --quiet, --silent:静默模式,即不输出任何信息;
-n,显示行号
-A #:after, 后#行
-B #:before,前#行
-C #:context,前后各#行

基本正则表达式元字符:
分为四种,字符匹配,匹配次数,位置锚定,分组及引用

建立测试文件daidai:Linux文件搜素工具(grep正则表达式)

字符匹配:
. :匹配任意单个字符;类似glob中的Grep?“r…t” /etc/passwd Linux文件搜素工具(grep正则表达式)
Linux文件搜素工具(grep正则表达式)

[]:匹配指定范围内的任意单个字符;Linux文件搜素工具(grep正则表达式)

[^]:匹配指定范围外的任意单个字符; 脱字符

Linux文件搜素工具(grep正则表达式)

[:digit:] 数字Linux文件搜素工具(grep正则表达式)
Linux文件搜素工具(grep正则表达式)

[:lower:] 小写字母Linux文件搜素工具(grep正则表达式)
Linux文件搜素工具(grep正则表达式)

[:upper:] 大写字母Linux文件搜素工具(grep正则表达式)
Linux文件搜素工具(grep正则表达式)

[:alpha:] 所有字母Linux文件搜素工具(grep正则表达式)

[:alnum:] 数字和字母Linux文件搜素工具(grep正则表达式)

[:punct:] 所有标点符号Linux文件搜素工具(grep正则表达式)

[:space:] 空格Linux文件搜素工具(grep正则表达式)
匹配次数:
用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数
创建一个测试文件呆呆:
文件内容如下:
|104|[[email protected] ~]#vim 呆呆
|105|[[email protected] ~]#cat 呆呆
可可爱爱没有脑袋
白白胖胖充满希望
呆呆傻
傻呆呆
哎哎哎哎哎吖
ccccccf
root
r t

zeehuu
haaaapppy
白白白白白白胖
可可可可可可爱Linux文件搜素工具(grep正则表达式)

:匹配其前面的字符任意次;0,1,多次;例如:grep "xy" abxy aby xxxxxy yab Linux文件搜素工具(grep正则表达式)

.*:匹配任意长度的任意字符 Linux文件搜素工具(grep正则表达式)
Linux文件搜素工具(grep正则表达式)

?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;Linux文件搜素工具(grep正则表达式)

+:匹配其前面的字符1次或多次;即其面的字符要出现至少1次
Linux文件搜素工具(grep正则表达式)

前面的无法控制次数,我们还可以精确次数匹配

{m}:匹配 其前面的字符m次; Grep “x{1}y” Linux文件搜素工具(grep正则表达式)

{m,n}:匹配其前面的字符至少m次,至多n次; Linux文件搜素工具(grep正则表达式)

{0,n} :至多n次 Linux文件搜素工具(grep正则表达式)

{m,} :至少m次 Linux文件搜素工具(grep正则表达式)
位置锚定:
^:行首锚定;用于模式的左侧; 脱字符
Grep “^root” /etc/passwd Linux文件搜素工具(grep正则表达式)
Linux文件搜素工具(grep正则表达式)

$ :行尾锚定;用于模式的右侧;
Grep "root"/etc/passwdPATTERN" /etc/passwd ^PATTERN:用于PATTERN来匹配整行;Linux文件搜素工具(grep正则表达式)

^$ :空白行; Linux文件搜素工具(grep正则表达式)

^ [[:space:]]*$:空行或包含空白字符的行; Linux文件搜素工具(grep正则表达式)

单词:非特殊字符组成的连续字符(字符串)都称为单词;

< 或\b:词首锚定,用于单词模式的左侧; Grep “<root” /etc/passwd Linux文件搜素工具(grep正则表达式)

> 或\b:词尾锚定,用于单词模式的右侧; Grep “root>” /etc/passwd
Linux文件搜素工具(grep正则表达式)

<PATTERN>:匹配完整单词; Grep “<root>” /etc/passwd
Linux文件搜素工具(grep正则表达式)
Linux文件搜素工具(grep正则表达式)
练习
1、显示/etc/passwd文件中不以/bin/bash结尾的行; ~]

grep -v “/bin/bash$” /etc/passwd Linux文件搜素工具(grep正则表达式)

2、找出/etc/passwd文件中的两位数或三位数; ~]

grep “<[0-9]{2,3}>” /etc/passwd

Linux文件搜素工具(grep正则表达式)

3、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行; ~]

grep “^ [[:space:]]+[ ^ [:space:]]” /etc/grub2.cfg Linux文件搜素工具(grep正则表达式)

4、找出"netstat -tan"命令的结果中以’LISTEN’后跟0、1或多个空白字符结尾的行; ~]

netstat -tan | grep “LISTEN[[:space:]]*$” Linux文件搜素工具(grep正则表达式)

分组及引用
创建测试文件“呆呆”:Linux文件搜素工具(grep正则表达式)

():将一个或多个字符捆绑在一起,当作一个整体进行处理;

(xy)*ab 命令行中括号有特殊意义所以用转义符\

Note:分组括号中的模式匹配 到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\3 . … 括号可以嵌套不能交叉
Linux文件搜素工具(grep正则表达式)
Linux文件搜素工具(grep正则表达式)