grep
程序员文章站
2024-02-23 23:22:00
...
grep
print lines matching a pattern
操作对象是一个文件的关键词,确定这个关键词,然后显示的时候附加参数(反显示,同时显示上下几行,显示时增加行号)。
选项
- c 行数 跟wc-l差不多
- i 不区分大小写 find -iname
- n 显示行号 set nu
- v 取反
- An 过滤符合的行以及下面n行
- Bn 过滤符合的行以及上面n行
- Cn 过滤符合的行以及上下n行
- r 过滤所有子目录
[[email protected] awk]# grep mail -c awk.txt
1
[[email protected] awk]# grep h -in awk.txt
1:root:x:0:0:root:/root:/bin/bash
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
18:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
19:chrony:x:998:996::/var/lib/chrony:/sbin/nologin
20:www:x:1000:1000::/home/www:/bin/bash
21:Huawei12#$:22222
[[email protected] awk]# grep [^z-k] -n awk.txt
grep: Invalid range end //不能识别反序.
[[email protected] awk]# grep [^k-z] -n awk.txt
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
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[[email protected] awk]# grep H -A5 awk.txt
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin //不够5行...
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
www:x:1000:1000::/home/www:/bin/bash
Huawei12#$:22222
# cci jumsss:1111
1a
2b
3c
9d
[[email protected] awk]# grep emd -B3 awk.txt
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
[[email protected] awk]# grep emd -C3 awk.txt
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
grep 配合正则符号
- [^] 代表非括号中的字符
- ^[] 代表以括号中的字符开头
- . 代表一个字符
- * 代表*前面出现的次数(0-n)
- {} 里面的数字代表前面字符出现的次数
- + 代表+前面出现的次数(1-n)
- ? 代表?前面出现的次数(0-1)
- | 代表逻辑或
*>+>{}>?
[[email protected] awk]# grep ^root -n awk.txt
1:root:x:0:0:root:/root:/bin/bash
[[email protected] awk]# grep ^[0-9] -n awk.txt
23:1a
24:2b
25:3c
26:9d
27:0u
28:4545h
[[email protected] awk]# grep '.*' -n awk.txt //过滤所有,匹配所有
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
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
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
[[email protected] awk]# grep 'r.t' awk.txt
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
当关键字里有特殊符号的时候要用\将字符脱衣,或者使用egrep扩展。
[[email protected] awk]# grep '0{2}' awk.txt
[[email protected] awk]# grep '0\{2\}' awk.txt
games:x:12:100:games:/usr/games:/sbin/nologin
www:x:1000:1000::/home/www:/bin/bash
[[email protected] awk]# egrep '0{2}' awk.txt
games:x:12:100:games:/usr/games:/sbin/nologin
www:x:1000:1000::/home/www:/bin/bash
上一篇: Linux命令学习之grep命令