欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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