学习linux12

正则表达式

正则介绍

什么是正则

正则就是一串有规律的字符串
掌握好正则对于编写shell脚本有很大的帮助
各种编辑语言中都有正则,原理是一样的。

grep命令
命令格式:grep [-cinvrABC] ‘word’ filename
常用选项

-c 表示行数
-I 表示忽不区分大小写
-n 表示输出符合要求的行及其行号
-v 表示取反 反转查找
-r 遍历子目录下面文件所有文件
-A 后面跟数字,过滤出符合要求的行以及下面的行
-B 后面跟数字 过滤出符合要求的行以及上面n行
-C 后面跟数字 同时过滤出符合要求的行以及上下各n行

实验:创建grep目录 把/etc/passwd 文件拷贝过来

[root@qklinux-01 ~]# mkdir grep
[root@qklinux-01 ~]# cd grep
[root@qklinux-01 grep]# cp /etc/passwd .
[root@qklinux-01 grep]# ls
passwd
[root@qklinux-01 grep]# pwd
/root/grep

然后过滤文件里nologin字符

在这里插入图片描述
我们可以看到nologin过滤完后自动标红 这是因为在centos7中grep -–color=auto
[root@qklinux-01 grep]# which grep
alias grep=‘grep --color=auto’
/usr/bin/grep

grep –c 查看行数

[root@qklinux-01 grep]# grep -c 'nologin' passwd
16

grep –n 显示行号

[root@qklinux-01 grep]# grep -n  'nologin' passwd
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19:chrony:x:998:996::/var/lib/chrony:/sbin/nologin
24:user4:x:1006:1005::/home/qkai111:/sbin/nologin

grep –i不区分大小写

在这里插入图片描述
grep –v取反

[root@qklinux-01 grep]# grep -vni 'nologin' passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
20:qkai:x:1000:1005::/home/qkai:/bin/bash
21:user1:x:1001:1001::/home/user1:/bin/bash
22:user2:x:1002:1002::/home/user2:/bin/bash
23:user3:x:1004:1005::/home/user3:/bin/bash
25:user5:x:1007:1007::/home/user5:/bin/bash
26:user6:x:1008:1010::/home/user6:/bin/bash

grep –r遍历子目录下面文件所有文件
列出etc下包含root的所有文件

在这里插入图片描述
-A2 把包含root的行 以及下面的两行都打印出来
在这里插入图片描述
-B2把包含root的行 以及这行上面的两行都打印出来
在这里插入图片描述
-C2把包含root的行以及上下两行都打印出来
在这里插入图片描述
grep/egrep的用法示例
grep ‘[0-9]’ 查看一个文件里0-9的数字 其中[]方括号表示任意一个字符

在这里插入图片描述
grep –v取反 列出不包含数字的

[root@qklinux-01 grep]# grep -v '[0-9]' /etc/inittab
#inittab is no longer used when using systemd.
#
#ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
#Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
#systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
#
#To view current default target, run:
#systemctl get-default

把不以#开头的过滤掉

[root@qklinux-01 grep]# grep -nv '^#' inittab
14:sdisiaihcasb

过滤非0-9开头的数字行

[root@qklinux-01 grep]# grep '^[^0-9]' inittab
#inittab is no longer used when using systemd.
#
#ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
#Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
aaaa
#
#systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
#multi-user.target: analogous to runlevel 3
#graphical.target: analogous to runlevel 5
#
#To view current default target, run:
#systemctl get-default
sdisiaihcasb
#
#To set a default target, run:
#systemctl set-default TARGET.target
#

取反行

[root@qklinux-01 grep]# grep -vn '^[^0-9]' inittab
9:1111111

^符号放在方括号就是方括号里面内容的反义 放在括号外就是以什么开头
过滤出任意个字符。 点代表任意一个字符

[root@qklinux-01 grep]# grep 'r.o' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

*代表这个符号前面那个字符有零个或者多个
在这里插入图片描述
*所有都匹配.同时使用
在这里插入图片描述
指定要过滤的字符出现次数

在这里插入图片描述
{}花括号表示一个范围 要加上脱义字符\ o{2}表示两个连续的oo显示出来

#grep ‘o{2}’ passwd
#egrep ‘o{2}’ passwd
#grep -E ‘o{2}’ passwd

可以看到这三个输出结果都是一样的
在这里插入图片描述
+过滤一次或多次指定的字符 两种方法 grep egrep

[root@qklinux-01 grep]# grep 'o\+o' passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@qklinux-01 grep]# egrep 'o+o' passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

?表示?前面字符重复次数 是零或者1

在这里插入图片描述
匹配过滤出root或者nologin 用|

#grep -E 'root|nologin' passwd

在这里插入图片描述
总结

. 表示任意一个字符
星号表示前面字符零个或多个
{}表示一个范围 花括号前面的字符范围要用小括号
+表示一个或多个+前面的字符
?表示?前面的字符幽灵个或1个
|表示或者

直播扩展
简易审计系统
http://www.68idc.cn/help/server/linux/2014042190951.html

read命令解释
http://blog.lishiming.net/?p=484

正则表达式几个核心关键词
. 点表示任意个字符
*表示表示匹配前一个字符大于等于0次
+表示匹配前面一个字符大于等于1次
?表示匹配前一个字符0或1次
()表示是为了提取匹配的字符串
{}一般用来表示匹配的长度
|表示或者
[]表示在范围内选择其中一个[0-9] [a-z]
^在括号内表示取反 括号外表示从这里开始
$结束标记
\ 匹配后转义字符串

扩展正则 + ?(){} | 需要使用命令 grep -E或者egrep

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值