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自定义代码片段4——cli的终端命令大全

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

所有机器上的 Grep“-C”命令

arx代码片段

shell 命令 grep -R 查询包含指定内容的文件