grep命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep命令相关的知识,希望对你有一定的参考价值。
正则- 正则就是一串有规律的字符串(包括一些特殊符号的字符串)
- 掌握好正则对于编写shell脚本有很大的帮助
- 各种编程语言中都有正则,原理都是一样的
- 主要有grep/egrep,sed,awk四个工具
grep
- grep [-cinvrABC] ‘word‘ filename
- -c 行数
[[email protected] grep]# grep -c ‘nologin‘ passwd 17
- -n 显示行号
[[email protected] grep]# grep -n ‘nologin‘ passwd 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 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 13:nobody:x:99:99:Nobody:/:/sbin/nologin 14:systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin 15:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 16:dbus:x:81:81:System message bus:/:/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 20:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 21:chrony:x:997:995::/var/lib/chrony:/sbin/nologin
- -i不区分大小写
[[email protected] grep]# grep -in ‘nologin‘ passwd 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 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 13:nobody:x:99:99:Nobody:/:/sbin/nologin 14:systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin 15:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 16:dbus:x:81:81:System message bus:/:/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 20:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 21:chrony:x:997:995::/var/lib/chrony:/sbin/nologin
- -v取反
[[email protected] grep]# grep -vn ‘nologin‘ passwd 1:root:x:0:0:root:/root:/bin/bash 2:bin:x:1:1:bin:/bin:/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 22:aming:x:1000:1000::/home/aming:/bin/bash 23:user1:x:1001:1001::/home/user1:/bin/bash 24:user3:x:1004:1004::/home/user3:/bin/bash
- -r遍历所有子目录,通常跟目录,查找目录下所有子目录和文件
- -A后面跟数字,过滤出符合要求行及下面n行
- -B同上,过滤出符合要求行及上面n行
- -C同上,过滤出符合要求行及上下n行
[[email protected] grep]# grep -C2 ‘root‘ passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/NOlogin daemon:x:2:2:daemon:/sbin:/sbin/nologin -- 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 games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
- grep ‘[0-9]‘ passwd 0-9任意一个数字的过滤,也可以加-v取反
[[email protected] grep]# grep ‘[0-9]‘ passwd 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 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/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 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-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin chrony:x:997:995::/var/lib/chrony:/sbin/nologin aming:x:1000:1000::/home/aming:/bin/bash user1:x:1001:1001::/home/user1:/bin/bash user3:x:1004:1004::/home/user3:/bin/bash
- grep -v ‘^#‘ inittab过滤不以#开头的行
[[email protected] grep]# grep -v ‘^#‘ inittab &&&*&*&*&*&*{}() aaaaaaaa dakdjahkjdhajkdhkaj 1111111111111
- grep ‘[^0-9]‘ inittab 过滤非数字的字符,符号^方括号里面取非外面是以什么开头
- grep ‘^[^0-9]‘ inittab 过滤不以数字开头的行
- grep ‘r.o‘ passwd 过滤以r开头o结尾的任意一个字符,包括点
[[email protected] grep]# grep ‘r.o‘ passwd root:x:0:0:root:/root:/bin/bash dadadnamnm:123333:dakh3:ddada:rao:233 2222223:r>o:dahdjahj operator:x:11:0:operator:/root:/sbin/nologin
- grep ‘r*o‘ passwd 过滤0个或多个*前面的字符,
[email protected] grep]# grep ‘r*o‘ passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/NOlogin daemon:x:2:2:daemon:/sbin:/sbin/nologin dadadnamnm:123333:dakh3:ddada:rao:233
- grep ‘.*‘ passwd ----- .*通配表示任意字符的一个或多个,所有包括特殊符号
[[email protected] grep]# grep ‘aming.*bash‘ passwd aming:x90()[]:.;&^%$#@!:1000:1000::/home/aming:/bin/bash
- grep ‘o\{2\}‘ passwd 两个o匹配,可以加-E参数不加脱义符或者用egrep(就是grep -E)
- egrep ‘(oo){2}‘ passwd 两个oo匹配
[[email protected] grep]# egrep ‘(oo){2}‘ passwd lp:x:4:7:lp:/var/sprrrttooo*&^oooool/lpd:/sbin/nologin
- egrep ‘o+t‘ passwd 一个或多个+前面的字符匹配
[[email protected] grep]# egrep ‘o+t‘ passwd root:x:0:0:root:/root:/bin/bash
- egrep ‘o?t‘ passwd 零个或一个?前面的字符
[[email protected] grep]# egrep ‘o?t‘ passwd root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/sprrrttooo*&^oooool/lpd:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
-
egrep ‘root|nologin|pos‘ passwd |表示或者
[[email protected] grep]# egrep ‘root|nologin|pos‘ passwd root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/sprrrttooo*&^oooool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin 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-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
- 把一个目录下,过滤所有*.txt文档中含有a的行
[[email protected] grep]# grep -r --include="*.txt" ‘a‘ /root/ /root/a.txt: 1 abc /root/a.txt: 1 abc 111,222 /root/1.txt:root:x:0:0:root:/root:/bin/bash /root/1.txt:daemon:x:2:2:daemon:/sbin:/sbin/nologin /root/1.txt:adm:x:3:4:adm:/var/adm:/sbin/nologin /root/1.txt:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin /root/1.txt:halt:x:7:0:halt:/sbin:/sbin/halt /root/1.txt:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin /root/1.txt:operator:x:11:0:operator:/root:/sbin/nologin /root/1.txt:2222222aaaaaa /root/1.txt:4234234252sdadhkajhkj /root/1.txt:22aaa /root/2.txt:abc 111,222 /root/2.txt:abc
以上是关于grep命令的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程