正则

9.1 正则介绍_grep上
9.2 grep中
9.3 grep下
扩展
把一个目录下,过滤所有*.php文档中含有eval的行
grep -r --include="*.php" 'eval' /data/

一、 grep

  • 正则就是一串有规律的字符串
  • 掌握好正则对于编写shell脚本有很大帮助
  • 各种编程语言中都有正则,原理是一样的
  • 本章将要学习grep/egrep、sed、awk

grep/egrep命令

  • grep命令:过滤出指定关键字的行;
  • 格式:grep [参数] ‘字符’ filename 
  • grep -n 显示符号要求的行,并显示行号
  • grep -c 打印符合要求的行数
  • grep -v 打印不符合要求的行,取反的意思
  • grep -r 会把目录下的所有文件全部遍历;-r针对的是目录,如果不加-r只能针对文件
  • grep -i 忽略大小写
  • grep -A2 打印符合要求的行以及下面两行
  • grep -B2 打印符合要求的行以及上面两行
  • grep -C2 打印符合要求的行以及上下两行
  • grep -w 匹配一个完整的单词
  • grep -E 特殊符号脱意==egrep
  • centos7中自带 --color显示颜色 ;
  • grep 跟特殊符号的话,要用单引号
  • grep --include 包含
  • grep -l 只打印出含有匹配字符串的文件名,不输出具体匹配行的数据

过滤出包含root字符的行。

[root@linux-151 ~]# grep 'root' test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

grep –n 过滤出包含root的行,并显示行号;

[root@linux-151 ~]# grep -n 'root' test.txt
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

test.txt中包含root字符的一共有几行。

[root@linux-151 ~]# grep -c 'root' test.txt
2

过滤出不包含nologin的行;

[root@linux-151 ~]# grep -v 'nologin' test.txt
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
lem:x:1000:1000::/home/lem:/bin/bash
user3:x:1004:1003::/home/user3:/sbin/nolongin
user4:x:1005:1003::/home/user4:/sbin/nolongin
user5:x:1007:1006::/home/user5:/bin/login
user7:x:1009:1009::/home/user7:/bin/bash

grep –i 不区分大小写

[root@linux-151 ~]# grep  -i 'biin' test.txt
root:x:0:0:root:/root:/biin/bash
Biin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sBiin/nologin
sync:x:5:0:sync:/sbin:/Biin/sync
shutdown:x:6:0:shutdown:/sbiin:/sbin/shutdown
[root@linux-151 ~]# grep   'biin' test.txt
root:x:0:0:root:/root:/biin/bash
shutdown:x:6:0:shutdown:/sbiin:/sbin/shutdown

grep –A2 打印符合要求的行以及下面两行;

[root@linux-151 ~]# grep -nA2 'root' test.txt
1:root:x:0:0:root:/root:/biin/bash
2-Biin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/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

grep –B2 打印符合要求的行以及上面两行;

[root@linux-151 ~]# grep -nB2 'spool' test.txt
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
4-adm:x:3:4:adm:/var/adm:/sBiin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
--
7-shutdown:x:6:0:shutdown:/sbiin:/sbin/shutdown
8-halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
--
17-polkitd:x:998:996:User for polkitd:/:/sbin/nologin
18-tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
19:postfix:x:89:89::/var/spool/postfix:/sbin/nologin

grep –C2 打印符合要求的行以及这行上下各两行;

[root@linux-151 ~]# grep -nC2 'halt' test.txt
6-sync:x:5:0:sync:/sbin:/Biin/sync
7-shutdown:x:6:0:shutdown:/sbiin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10-operator:x:11:0:operator:/root:/sbin/nologin

grep/egrep示例:

  • grep -n 'root' test.txt
  • grep -nv 'nologin' test.txt
  • grep '[0-9]'/etc/inittab
  • grep -v '[0-9]'/etc/inittab
  • grep -v '^#' /etc/inittab
  • grep -v '^#' /etc/inittab|grep -v '^$'
  • grep '^[^a-zA-Z]' test.txt 
  • grep 'r.o' test.txt
  • grep 'oo*' test.txt
  • grep '.*' test.txt
  • grep 'o{2}' /etc/passwd
  • egrep 'o{2}' /etc/passwd
  • egrep 'o+' /etc/passwd
  • egrep 'oo?' /etc/passwd
  • egrep 'root|nologin' /etc/passwd
  • egrep '(oo){2}' /etc/passwd
  • [0-9]:这里的方括号,表示方括号里面的任意一个字符;只要有一个数字,不管是几,就算符合要求。

过滤出包含数字的行 ; grep '[0-9]' test1.txt

[root@linux-151 ~]# grep '[0-9]' test1.txt
root:x:0:0:root:/root:/biin/bash
123123
Biin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sBiin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
aaaa1111bbbb
11111111
sync:x:5:0:sync:/sbin:/Biin/sync
shutdown:x:6:0:shutdown:/sbiin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

过滤出所有不包含数字的行; grep -nv 'nologin' test.txt

[root@linux-151 ~]# grep -nv '[0-9]' test1.txt
8:BBBBBBB
11:asgfhavkhasd

过滤出不以#开头的行,方便查看某个文件的配置

[root@linux-151 ~]# grep -nv '^#' 2.txt
10:dbadfasdfervadsv
13:123`123dv
15:123123123
16:

过滤出不以#或者开头的行不包括空行

[root@linux-151 ~]# grep -v '^#' 2.txt |grep -v '^$'
dbadfasdfervadsv
123`123dv
123123123

过滤出不以字母开头的行

grep '^[^a-zA-Z]' test.txt 
[root@linux-151 ~]# grep '^[^a-zA-Z]' test.txt
11111111111
!@@@@$$$$$$
111111a22222222

过滤出不包含特殊符号的行

grep -v '^[^a-zA-Z0-9]' 2.txt 
[root@linux-151 ~]# grep -v '^[^a-zA-Z0-9]' 2.txt
dbadfasdfervadsv
123`123dv
123123123

正则里面的特殊符号

  • 1 . 表示 任意一个字符
  • 2 * 表示 零个或多个前面的字符
  • 3 .* 表示零个或多个任意字符,空行也包含在内;以r开头o结尾。
  • 4 ? 表示0个或者1个前面的字符,使用的时候要\ 脱意一下
  • 5 + 表示一个或者多个+前面的字符
  • 6 | 在正则表达式里面表示或者,可以写多个,是特殊符号,要使用脱意 或者-E 或者 egrep
  • 7 () 括号表示一个整体,{1,3}大括号表示一个范围 ? +(){} |都是特殊符号,要使用必须脱意或者-E 或者egrep
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值