【Linux】Linux-grepコマンドを一歩一歩学ぶ(49)


00.目次
文書ディレクトリ
  • 00. ディレクトリ
  • 01. コマンド概要
  • 02. コマンドフォーマット
  • 03. 共通オプション
  • 04. 参考例
  • 05. 付録
  • 01.コマンドの概要
    Linuxシステムのgrepコマンドは、正規表現を使用してテキストを検索し、一致する行を印刷する強力なテキスト検索ツールです.grepのフルネームはGlobal Regular Expression Printで、グローバル正規表現バージョンを表し、その使用権限はすべてのユーザーです.
    grepコマンドのオプションは、検索プロセスの補完に使用されますが、そのコマンドのモードは非常に柔軟で、変数、文字列、正規表現です.注意しなければならないのは、モードにスペースが含まれている場合は、必ず二重引用符で引き起こしてください.
    linuxシステムは3つの形式のgrepコマンドをサポートし、長男はgrep、標準、模倣の代表である.二番目の息子は多くの-egrepを爱して、略称はgrepコマンドを拡張して、実はgrep-Eと等価で、基本と拡張の正則表現を支持します.末っ子が走る最速-fgrepは、高速grepコマンドと略称され、grep-Fと等価であり、正規表現はサポートされず、文字列の表面の意味に従ってマッチングされる.
    02.コマンドフォーマット
    grep [options] PATTERN [FILE...]
    grep [options] [-e PATTERN | -f FILE] [FILE...]
    

    03.一般的なオプション
          :
     -E, --extended-regexp            egrep
     -F, --fixed-strings                     fgrep
     -G, --basic-regexp            
     -P, --perl-regexp            perl  
     -e, --regexp=PATTERN             ,   
     -f, --file=FILE                     
     -i, --ignore-case               
     -w, --word-regexp               
     -x, --line-regexp             
     -z, --null-data              0       ,     
    
      :
     -s, --no-messages                
     -v, --invert-match               
     -V, --version                  
     --help                          
     --mmap                use memory-mapped input if possible
    
        :
     -m, --max-count=NUM             
     -b, --byte-offset                          。
     -n, --line-number                     
     --line-buffered                  
     -H, --with-filename               ,         
     -h, --no-filename                 ,          
     --label=LABEL            print LABEL as filename for standard input
     -o, --only-matching               PATTERN    
     -q, --quiet, --silent             
     --binary-files=TYPE           TYPE   ;
                                          TYPE    `binary', `text',  `without-match'
     -a, --text                        
     -I                                 
     -d, --directories=ACTION      ,  ,  ,  
     -D, --devices=ACTION           ,FIFO,     ,  ,  
     -R, -r, --recursive           
     --include=PATTERN          FILE_PATTERN    
     --exclude=PATTERN         FILE_PATTERN       
     --exclude-from=FILE        FILE      
     -L, --files-without-match        ,         
     -l, --files-with-matches         ,        
     -c, --count                      
     -Z, --null                 FILE          
    
        :
     -B, --before-context=NUM                 NUM  
     -A, --after-context=NUM                  NUM  
     -C, --context=NUM                   ,       NUM  
     -NUM                       -C      
     --color[=WHEN],
     --colour[=WHEN]                 ;
     
     -U, --binary                         ;
     -u, --unix-byte-offsets    CR      ,      (MSDOS   )
     
         :
    grep      :
    
    ^  #        :'^grep'     grep    。 
    $  #        :'grep$'     grep    。 
    .  #             :'gr.p'  gr        ,   p。 
    *  #             :'*grep'              grep  。 
    .*   #         。 
    []   #            , '[Gg]rep'  Grep grep。 
    [^]  #              , :'[^A-FH-Z]rep'     A-R T-Z       ,  rep  。 
    \(..\)  #      , '\(love\)',love    1。 
    \<      #       , :'\
    \>      #       , 'grep\>'     grep       。 
    x\{m\}  #    x,m , :'0\{5\}'    5 o  。 
    x\{m,\}  #    x,  m , :'o\{5,\}'     5 o  。 
    x\{m,n\}  #    x,  m ,   n , :'o\{5,10\}'  5--10 o  。 
    \w    #         ,   [A-Za-z0-9], :'G\w*p'   G              ,   p。 
    \W    #\w     ,            ,      。 
    \b    #     , : '\bgrep\b'   grep。 
    
    POSIX  :
                     ,POSIX(The Portable Operating System Interface)[:alnum:] [A-Za-z0-9][][A- Za-z0-9] [[:alnum:]]。 linux  grep fgrep ,   POSIX    。
    
    [:alnum:]    #       
    [:alpha:]    #     
    [:digit:]    #     
    [:graph:]    #    (   、    ) 
    [:lower:]    #     
    [:cntrl:]    #     
    [:print:]    #    (    ) 
    [:punct:]    #     
    [:space:]    #      (  ,  ,   ) 
    [:upper:]    #     
    [:xdigit:]   #      (0-9,a-f,A-F) 
    

    04.参考例
    4.1ファイル内の単語の検索
    [deng@localhost share]$ grep "root" /etc/passwd 
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [deng@localhost share]$ 
    

    4.2複数のファイルで単語を検索
    [deng@localhost test]$ grep "root" passwd passwd1
    passwd:root:x:0:0:root:/root:/bin/bash
    passwd:operator:x:11:0:operator:/root:/sbin/nologin
    passwd1:root:x:0:0:root:/root:/bin/bash
    passwd1:operator:x:11:0:operator:/root:/sbin/nologin
    [deng@localhost test]$ 
    

    4.3一致以外のすべての行を出力する
    [deng@localhost test]$ grep -v "root" /etc/passwd
    

    4.4マッチング部分の色表示
    [deng@localhost test]$ grep "root" /etc/passwd --color=auto
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [deng@localhost test]$ 
    

    4.5正規表現の使用
    [deng@localhost test]$ grep -E "[1-9]+" /etc/passwd
    

    または
    [deng@localhost test]$ egrep "[1-9]+" /etc/passwd
    

    4.6ファイルに一致する部分のみを出力する
    [deng@localhost test]$ grep -o "root" /etc/passwd
    root
    root
    root
    root
    [deng@localhost test]$ 
    

    4.7統計ファイルまたはテキストに一致する文字列を含む行数
    [deng@localhost test]$ grep -c "root" /etc/passwd
    2
    

    4.8一致する文字列を含む行番号を出力する
    [deng@localhost test]$ grep -n "root" /etc/passwd 
    1:root:x:0:0:root:/root:/bin/bash
    10:operator:x:11:0:operator:/root:/sbin/nologin
    [deng@localhost test]$ 
    

    複数ファイルの照合
    [deng@localhost test]$ grep -n "root" passwd passwd1
    passwd:1:root:x:0:0:root:/root:/bin/bash
    passwd:10:operator:x:11:0:operator:/root:/sbin/nologin
    passwd1:1:root:x:0:0:root:/root:/bin/bash
    passwd1:10:operator:x:11:0:operator:/root:/sbin/nologin
    [deng@localhost test]$ 
    

    4.9出力文字またはバイトオフセット-b文字またはバイトオフセットを表示
    [deng@localhost test]$ grep -b -o "root" /etc/passwd
    0:root
    11:root
    17:root
    366:root
    [deng@localhost test]$ 
    

    4.10複数のファイルを検索し、一致するテキストファイルを検索する
    [deng@localhost test]$ grep -l "root" passwd passwd1
    passwd
    passwd1
    [deng@localhost test]$ 
    

    4.11マルチレベルディレクトリでテキストを再帰的に検索する
    [deng@localhost test]$ grep -r "root" /etc
    

    4.12大文字と小文字の検索を無視する
    [deng@localhost test]$ grep -i "ROOT" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [deng@localhost test]$ 
    

    4.13一致する複数の文字列を同時に指定する
    [deng@localhost test]$ grep -e "root" -e "deng" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    deng:x:1000:1000:deng:/home/deng:/bin/bash
    [deng@localhost test]$ 
    

    4.14 grep検索結果に指定ファイルを含めるか除外する
    ディレクトリ内のすべてphpと.htmlファイル内の再帰検索文字「main」
    [deng@localhost test]$ grep -r "main" ./ --include *.{php,html}
    

    検索結果からすべてのREADMEファイルを除外
    [deng@localhost test]$ grep -r "main" ./ --exclude "README"
    

    検索結果からfilelistファイルリストから除外されるファイル
    [deng@localhost test]$ grep -r "main" ./ --exclude-from filelist
    

    4.15何も表示しない
    [deng@localhost test]$ grep -q "root" /etc/passwd
    

    4.16 0値バイト接尾辞を使用するgrepとxargs
    #    :
    echo "aaa" > file1
    echo "bbb" > file2
    echo "aaa" > file3
    
    grep "aaa" file* -lZ | xargs -0 rm
    
    #      file1 file3,grep   -Z      0           (\0),xargs -0       0           ,        ,-Z   -l    。
    

    4.17一致テキストの前または後の行を印刷する
    結果に一致する3行を表示し、-Aオプションを使用します.
    [deng@localhost test]$ seq 1 10 | grep "5" -A 3
    5
    6
    7
    8
    [deng@localhost test]$ 
    

    結果に一致する前の3行を表示し、-Bオプションを使用します.
    [deng@localhost test]$ seq 1 10 | grep "5" -B 3
    2
    3
    4
    5
    [deng@localhost test]$ 
    

    結果に一致する最初の3行と後の3行を表示します.-Cオプションを使用します.
    [deng@localhost test]$ seq 1 10 | grep "5" -C 3
    2
    3
    4
    5
    6
    7
    8
    [deng@localhost test]$ 
    

    一致結果は複数あり、各一致結果間の区切り記号として「-」が使用されます.
    [deng@localhost test]$ echo -e "a
    b
    c
    a
    b
    c"
    | grep a -A 1 a b -- a b

    4.18ファイル内の空白行と非空白行を検索する
    統計ファイル内の空白行の行数
    [deng@localhost test]$ grep -c ^$ /etc/passwd
    

    統計ファイルの空でないローの数
    [deng@localhost test]$ grep -c ^[^$] /etc/passwd
    46
    [deng@localhost test]$ 
    

    4.19 rootで始まるすべての行を出力する
    [deng@localhost test]$ grep ^root /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    [deng@localhost test]$ 
    

    4.20 bashで終わるすべてのローを出力
    [deng@localhost test]$ grep bash$ /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    deng:x:1000:1000:deng:/home/deng:/bin/bash
    oracle:x:1001:1002::/home/oracle:/bin/bash
    itcast:x:1002:1003::/home/itcast:/bin/bash
    [deng@localhost test]$ 
    

    4.21ファイルからキーワード検索を読み込む
    [deng@localhost test]$ grep -f file /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [deng@localhost test]$ cat file 
    root
    [deng@localhost test]$ 
    

    説明:出力/etc/passwdファイルにfileファイルから読み出したキーワードを含む内容行
    4.22正規表現をサポート
    現在のディレクトリの下に表示する.txt末尾のファイル内の各文字列に少なくとも7つの連続小文字を含むすべての文字列の行
    [deng@localhost test]$ grep '[a-z]\{7\}'  *.txt
    

    4.23 rootとdengに一致するすべての行を表示する
    [deng@localhost test]$ grep -E "root|deng" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    deng:x:1000:1000:deng:/home/deng:/bin/bash
    [deng@localhost test]$ 
    

    4.24一致IPアドレス
    X{m,n}マッチング文字X m-n回
    [deng@localhost test]$ ifconfig ens33 |grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
            inet 192.168.1.104  netmask 255.255.255.0  broadcast 192.168.1.255
    [deng@localhost test]$ 
    

    4.25 rootまたはdengまたはitcastに一致する
    [deng@localhost test]$ grep '\(root\|deng\|itcast\)' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    deng:x:1000:1000:deng:/home/deng:/bin/bash
    itcast:x:1002:1003::/home/itcast:/bin/bash
    [deng@localhost test]$ 
    

    4.26 X{m,}マッチング文字X最低m回
    [deng@localhost test]$ grep 'o\{2,\}' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    [deng@localhost test]$ 
    

    4.27 X{m}マッチング文字X m回
    [deng@localhost test]$ grep 'o\{2\}' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    [deng@localhost test]$ 
    

    4.28+前の文字または文字列に1回または複数回一致
    [deng@localhost test]$ grep 'root\+' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    

    4.29 ? 前の文字または文字列を0回または複数回一致させる
    [deng@localhost test]$ grep 'root\?' /etc/passwd
    
    [deng@localhost test]$ grep 'root\?' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [deng@localhost test]$ 
    

    4.30メタ文字の特殊な意味を隠すために使用
    //  .
    [deng@localhost test]$ ifconfig  ens33 | grep '\.'
            inet 192.168.1.104  netmask 255.255.255.0  broadcast 192.168.1.255
            RX packets 102516085  bytes 13627338339 (12.6 GiB)
            TX packets 145027  bytes 41135471 (39.2 MiB)
    [deng@localhost test]$ 
    

    4.31[]内の文字に一致する
    文字'1'を含む文字列に一致する
    [deng@localhost test]$ grep [1] /etc/passwd
    

    「a」のように文字「a」を含む文字列に一致する
    [deng@localhost test]$ grep '[a]' /etc/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
    

    文字'1'または'2'または'3'を含む文字列に一致する
    [deng@localhost test]$ grep '[123]' /etc/passwd
    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
    

    文字シーケンスを使用して、「-」で文字シーケンスを表すこともできます.
    文字'1'または'2'または'3'を含む文字列に一致する
    [deng@localhost test]$ grep '[1-3]' /etc/passwd
    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
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    

    文字'1'または'2'または'3'または'a'または'b'を含む文字列に一致する
    [deng@localhost test]$ grep '[1-3a-b]' /etc/passwd
    

    4.32 .任意の単一文字に一致
    任意の2文字で始まり、3番目の文字は「3」です.
    [deng@localhost test]$ grep '^..3' /etc/passwd
    

    05.付録
    参考:【Linux】一歩一歩Linuxシリーズチュートリアルのまとめ