什么是正则表达式?
正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让用户轻易达到查找、删除、替换特定字符串的处理程序
一、grep
1. grep   过滤文件关键字
[[email protected] grep]# grep 'root' wd.txt        #过滤wd.txt文件中有root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
2. grep -c   统计关键字共有多少行
[[email protected] grep]# grep -c 'root' wd.txt      #统计wd.txt文件中有多少带有root的行数
2
3. grep -n   显示关键字所在行的行号
[[email protected] grep]# grep -n 'root' wd.txt      #显示wd.txt文件中root关键字所在行的行号
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
4. grep -i    不区分大小写
[[email protected] grep]# grep -i 'root' wd.txt          #不区分大小写搜索带有root的行
ROOTt:x:0:0:ROOT:/ROOT:/bin/bash                            #这里的ROOT为大写
operator:x:11:0:operator:/root:/sbin/nologin
5. grep -v   取反,过滤出不带关键字的行
[[email protected] grep]# grep -v 'nologin' wd.txt       #过滤出wd.txt中不带nologin的行
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
lx01:x:1000:1000::/home/lx01:/bin/bash
lx02:x:1001:1001::/home/lx02:/bin/bash
lx03:x:1002:1003::/home/lx03:/bin/bash
mk100:x:1007:1007::/home/mk100:/bin/bash
6. grep -r   遍历目录下所有的文件和子目录,找到带有关键字的文件的行                
[[email protected] grep]# grep -r 'ens33' /etc/             #过滤出/etc/目录下所有文件带有enss33的行
/etc/sysconfig/network-scripts/ifcfg-ens33:NAME=ens33
/etc/sysconfig/network-scripts/ifcfg-ens33:DEVICE=ens33
7. grep -A   A后面接数字,过滤出符合要求的行及下面的n行
[[email protected] grep]# grep -nA2 'root' wd.txt     #过滤出passwd中带root的行,-A2并且把这一行下面的2行也显示出来
1:root:x:0:0:ROOT:/root:/bin/bash
2-bin: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/nologi
    grep -B   B后面接数字,过滤出符合要求的行及上面的n行
[[email protected] grep]# grep -nB2 'root' wd.txt       #过滤出passwd中带root的行,-B2并且把这一行上面的2行也显示出来
1:root:x:0:0:ROOT:/root:/bin/bash #
--
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 -C   C后面接数字,过滤出符合要求的行及上下n行
[[email protected] grep]# grep -nC2 'root' wd.txt        #过滤出passwd中带root的行,-C2并且把这一行上下的2行都显示出来
1:root:x:0:0:ROOT:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
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
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

二、正则的一些示例
1. grep '[0-9]'      过滤文件中所有带数字的行
[[email protected] grep]# grep '[0-9]' /etc/passwd      #过滤出/etc/pass中所有不带数字的行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
.......
2. grep -v '[0-9]'    过滤出所有不带数字的行
[[email protected] grep]# grep -v '[0-9]' /etc/passwd      #过滤出/etc/pass中所有不带数字的行
3. grep '^'             ^表示开始,后面跟字符,可以过滤以你填入的字符开头的行,同样可以使用-v取反
[[email protected] grep]# grep '^r' /etc/passwd          #过滤出/etc/passwd文件中以r开头的行
root:x:0:0:root:/root:/bin/bash
4. grep '[^0-9]'      匹配非数字的字符,^放到方括号[]里面的意思是取非
正则介绍:grep和egrep
5. grep '^[^0-9]'      匹配非数字开头的行
正则介绍:grep和egrep
6. grep 'r.o'    "."表示任意一个字符
[[email protected] grep]# grep 'r.o' wd.txt
root:x:0:0:ROOT:/root:/bin/bash
rto
srgo
operator:x:11:0:operator:/root:/sbin/nologin
7. grep 'r*o'    "*" 表示匹配*前面的字符,可以重复n次,
[[email protected] grep]# grep 'r*o' wd.txt
root:x:0:0:ROOT:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
rto
srgo
rddfgo
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
ooooo
8. grep '.*'          .和*组合起来表示任意个任意字符,0个也可以,表示全部
[[email protected] grep]# grep '.*' wd.txt
9. grep 'o\{2\}'   {}在正则里面使用表示范围,直接使用识别不了,需要脱义,不过不想脱义,那么使用加上参数-E也是可以的
1. [[email protected] grep]# grep 'o\{2\}' wd.txt     #表示匹配wd.txt文件中出现两次o的行
    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:/rooooot:/sbin/nologin
    ooooo
2. [[email protected] grep]# grep -E 'o{2}' wd.txt    #加上-E效果是一样的
    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:/rooooot:/sbin/nologin
    ooooo

三、egrep
1. egrep 'o{3}'    egrep是grep的扩展,使用egrep时,特殊字符不需要脱义
[[email protected] grep]# egrep 'o{3}' wd.txt
operator:x:11:0:operator:/rooooot:/sbin/nologin
ooooo
dbus:x:81:81:System message bus:/:/sbin/nooologin
2. egrep  '(oo){2}'   使用小括号(),表示一个整体
[[email protected] grep]# grep -E '(oo){2}' wd.txt           #表示两个oo出现两次,那么就是四个o
operator:x:11:0:operator:/rooooot:/sbin/nologin
ooooo
3. egrep 'o+t'      +号前面的字符可以有1个或者多个,不能是0个
[[email protected] grep]# egrep 'o+t' wd.txt
root:x:0:0:ROOT:/root:/bin/bash
operator:x:11:0:operator:/rooooot:/sbin/nologin
4. egrep 'o?t'       ?号前面的字符可以是0个或1个
[[email protected] grep]# egrep 'o?23' wd.txt
233sss
5. egrep 'root|bash'   |表示或者,
[[email protected] grep]# egrep 'root|bash' wd.txt
root:x:0:0:ROOT:/root:/bin/bash
lx01:x:1000:1000::/home/lx01:/bin/bash
lx02:x:1001:1001::/home/lx02:/bin/bash
lx03:x:1002:1003::/home/lx03:/bin/bash
mk100:x:1007:1007::/home/mk100:/bin/bash
6. grep -r --include=         过滤出一个目录下指定含有关键字文档,且含有指定关键字的行
[[email protected] grep]# grep -r --include="passwd" 'root' /etc/
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
把一个目录下,过滤所有*.php文档中含有eval的行
grep -r --include="*.php" 'eval' /data/





相关文章:

  • 2021-10-26
  • 2021-04-09
  • 2021-06-09
  • 2021-07-27
  • 2021-08-02
  • 2022-12-23
  • 2021-07-08
  • 2022-12-23
猜你喜欢
  • 2021-12-11
  • 2022-12-23
  • 2021-11-28
  • 2021-12-13
  • 2021-11-26
相关资源
相似解决方案