正则表达式:
正则就是一串有规律的字符串
掌握好正则对于编写shell脚本有很大帮助
各种编程语言中都有正则,原理是一样的
grep工具
格式:
grep [-cinvABC] 'word' filename
-c 行数
-i 不区分大小写
-n 显示行号
-v 取反
-r 遍历所有子目录
-A 后面跟数字,过滤出符合要求的行以及下面n行
-B 同上,过滤出符合要求的行以及上面n行
-C 同上,同时过滤出符合要求的行以及上下各n行
1、[root@test ~]# cat /etc/passwd| grep 'test'
test:x:507:111::/home/test:/bin/bash
test1:x:509:111::/home/test1:/bin/bash
gztest:x:555:111::/home/zg/:/bin/bash
-c:统计匹配的行数
[root@test ~]# grep -c 'test' /etc/passwd
3
2、
[root@test ~]# grep -in 'TesT' /etc/passwd
33:test:x:507:111::/home/test:/bin/bash
35:test1:x:509:111::/home/test1:/bin/bash
36:gztest:x:555:111::/home/zg/:/bin/bash
3、
[root@test ~]# ps -ef | grep rsync
root 11137 1 0 14:55 ? 00:00:00 rsync --daemon
root 11904 10038 2 16:10 pts/1 00:00:00 grep rsync
[root@test ~]# ps -ef | grep rsync| grep -v grep
root 11137 1 0 14:55 ? 00:00:00 rsync --daemon
4、
[root@test ~]# grep -r 'mysql' *
1.txt:mysqlroot=mysql -uroot -p
5、
[root@test ~]# grep -n -C 5 'test' /etc/passwd
28-apache:x:48:48:Apache:/var/www:/bin/bash
29-tcpdump:x:72:72::/:/sbin/nologin
30-dockerroot:x:498:498:Docker User:/var/lib/docker:/sbin/nologin
31-www:x:506:506::/home/www:/bin/bash
32-jenkins:x:497:497:Jenkins Automation Server:/var/lib/jenkins:/bin/false
33:test:x:507:111::/home/test:/bin/bash
34-gz1:x:508:508::/home/gz1:/bin/bash
35:test1:x:509:111::/home/test1:/bin/bash
36:gztest:x:555:111::/home/zg/:/bin/bash
37-fc:x:556:556::/home/fc:/bin/bash
38-rsync:x:557:557::/home/rsync:/sbin/nologin
通配符
字符和字符范围匹配
. 匹配任意"单个字符" (bash 中,使用?号)
* 匹配紧挨在其前面的字符任意次
.* 表示零个或多个任意字符,空行也包含在内。
'o\{2\}'' 出现2次以上的o打印;'o\{1,4\}':出现一次到4次的打印
[root@test ~]# ls 2*.txt
23.txt 2.txt
.* 组合-----匹配任意长度的任意字符
排除空格及#开头的行
[root@test ~]# grep -E -v '^$|^#' /etc/fstab
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=22af8038-24b3-4dd4-b91b-10f1727c1083 /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
UUID=4381537c-d536-40d6-9522-9343c5998a29 /data ext4 defaults 0 0
例子:
[root@centos7-2 tmp]# cat test.txt
123
abc
456
abc2323
#laksdjf
Alllllllll
问题1、查找出不是以大小写字母开头的行
#[^字符] 表示除[ ]内的字符之外的字符,^[]以什么开头;[15]:表示1和5,而不是15
grep ^[^A-Za-z] test.txt
以数字开头:
[root@test ~]# grep ^[0-9] 1.txt
1 asd
2sd
3
4
5
以a-z开头:
[root@test ~]# grep -E ^[a-z] 1.txt
mysqlroot=mysql -uroot -p
asd4444
sd
fsdf
[root@test ~]# grep -E ^[^a-z] 1.txt
1 asd
2sd
3
4
5
egrep=grep -E
1、筛选出出现一个或者多个o
egrep 'o+' /etc/passwd
2、egrep 'oo+' /etc/passwd
3、(oo)+表示出现一个或者多个oo的
[root@centos7-2 tmp]# egrep '(oo)+' 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
roooooooooot
rooodt