zoukankan      html  css  js  c++  java
  • grep用法

    grep

    grep 是linux 中最常用的“文本处理工具之一” 与sed awk 合称为linux中的三剑客!

    grep 就像你在windows中打开txt文件,使用快捷键“Ctrl+F” 在文本中查找某个字符串一样,可以把grep 理解为字符查找工具

    grep 的全程为Global search Regular Expression  and Print out the line 为全局搜索的意思

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    -i:在搜索的时候忽略大小写
    [root@localhost ~]# cat /etc/passwd|grep -i "SSH"
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
     
    -n: 显示结果所在行号
    [root@localhost ~]# cat /etc/passwd|grep -ni "SSH"
    17:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
     
    -c:统计匹配到的行数
    [root@localhost ~]# cat /etc/passwd|grep  "root"
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@localhost ~]# cat /etc/passwd|grep -c "root"
    2
     
    -w:匹配单个单词,如果字符串中包含这个单词,则不匹配
    [root@localhost ~]# cat /etc/passwd.bak|grep -w "root"
    root:x:0:0:root:/root:/bin/bash
    rootroo:x:0:0:root:/root:/bin/bash #不会显示rootroo的
     
    -e:实现多个选项的匹配。逻辑或or的关系
    ==egrep
    ==grep -E
    [root@localhost ~]# cat /etc/passwd.bak|egrep -w "root|sshd"
    root:x:0:0:root:/root:/bin/bash
    rootroo:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
     
    -q: 静默模式,不输出任何信息 判断:echo $?
    [root@localhost ~]# cat /etc/passwd.bak|grep -q "root"
     
    -v:输出不带关键字的行(反向查询,反向匹配)
    [root@localhost ~]# cat /etc/passwd.bak|grep -v "root"
    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
    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:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin

     sed

    流编辑器,主要用来过滤和替换文本内容

    工作原理:sed命令将当前处理的行读入模式空间进行处理,处理完把结果输出,并清空模式。然后再将下一行读入模式空间进行处理输出,以此类推,直至最后一行。

    用法:

    sed [选项] ‘命令’ file_name

    选项:

    1
    2
    选项                      描述
    -n                        不打印模式空间

    grep命令使用简单实例
               $ grep ‘test’ d*
                  显示所有以d开头的文件中包含 test的行。
              $ grep ‘test’ aa bb cc
                  显示在aa,bb,cc文件中匹配test的行。
              $ grep ‘[a-z]{5}’ aa
                  显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
              $ grep ‘w(es)t.*1′ aa
                  如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(1),找到就显示该行。如果用egrep或grep -E,就不用””号进行转义,直接写成’w(es)t.*1′就可以了。

    grep命令使用复杂实例
              假设您正在’/usr/src/Linux/Doc’目录下搜索带字符 串’magic’的文件:
              $ grep magic /usr/src/Linux/Doc/*
              sysrq.txt:* How do I enable the magic SysRQ key?
              sysrq.txt:* How do I use the magic SysRQ key?
              其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。
              默认情况下,’grep’只搜索当前目录。如果 此目录下有许多子目录,’grep’会以如下形式列出:
              grep: sound: Is a directory
              这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法:
              明确要求搜索子目录:grep -r
              或忽略子目录:grep -d skip
              如果有很多 输出时,您可以通过管道将其转到’less’上阅读:
              $ grep magic /usr/src/Linux/Documentation/* | less
              这样,您就可以更方便地阅读。

              有一点要注意,必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 <CTRL c> ,然后再试。

              下面还有一些有意思的命令行参数:
              grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
              grep -l pattern files :只列出匹配的文件名,
              grep -L pattern files :列出不匹配的文件名,
              grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
              grep -C number pattern files :匹配的上下文分别显示[number]行,
              grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
              grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

              grep -n pattern files  即可显示行号信息

              grep -c pattern files  即可查找总行数

  • 相关阅读:
    #include <NOIP2009 Junior> 细胞分裂 ——using namespace wxl;
    【NOIP合并果子】uva 10954 add all【贪心】——yhx
    NOIP2010普及组T4 三国游戏——S.B.S.
    NOIP2010普及组T3 接水问题 ——S.B.S.
    NOIP2011提高组 聪明的质监员 -SilverN
    NOIP2010提高组 关押罪犯 -SilverN
    uva 1471 defence lines——yhx
    json2的基本用法
    获取对象的属性个数
    替换指定规则的字符串
  • 原文地址:https://www.cnblogs.com/tyk3201/p/11970222.html
Copyright © 2011-2022 走看看