Linux Shellコマンド--grep


この編から、テキストの内容操作で、テキストの操作とは違います.
shell,perl,pythonは,テキスト操作の専門家言語であり,今後学習するのはshellのギャグであるテキスト操作である.次に、最も一般的なものについて説明します.
grep
これはテキストの内容のヘビー級の選手で、いくつかの規格に基づいて千行以上のテキストファイルで必要なデータを検索することができます.彼は正規表現とワイルドカードを受け入れることができる.
 
基本例:
1.コマンド翻訳は所定のmatch_を含む私がgrepにいるようにpatternのテキスト行.txtでPATTERNを検索
grep PATTERN grep.txt
or grep "PATTERN"grep.txt
2.複数のファイルを一致させる
grep PATTERN grep.txt grep1.txt
3.stdinから読み込む
echo –e "this is a wordnext line"| grep word
印刷:this a word
4.grepと正規表現
grep –E "[a-z]+"
または
egrep "[a-z]+"
5.一致する現在の行ではなく、一致する部分のみを出力します.
echo this is line. | greip –o –E "[a-z]+\."
出力:line
 
6.印刷除算はmatch_を含むpatternの行以外のすべての行は、使用できます.
grep -v match_pattern file
7.統計テキストまたはファイルに一致する文字列を含む文字数(この面接でよく聞かれる)
$grep -c "text"filename
しかし、彼が与えたのは、一致したローの回数ではなく、一致したローの回数です.
マッチング数を集計するには、次のテクニックを使用します.
$echo –e "1 2 3 4hello5 6"| egrep -o "[0-9]"| wc –l
印刷1~6|stdinから数字を読み出し、行数を集計する
8.行番号の印刷
grep "text"-n filename
9.2つのファイルとその行番号を検索し、出力するとファイル名が印刷されます
grep "text"–n s1.txt s2.txt
10.どのファイルに単語があるか知りたいならPATTERN
grep –l PATTER s1.txt s2.txt
-Lが返す不一致ファイルリスト
11.ディレクトリ全体で単語PATTERNを検索することができます.それらのファイルには
grep PATTERN . -R -n
12同時に複数の照合検索
echo this is a line of text | grep -e "this"-e "line"-o
印刷:
this
line
13特定の適切なファイルでのみ検索
grep "main()".-r --include *.{c,cpp}
だけです.c和.cppの最後のファイルでmain()を検索
14検索によるファイルの除外
grep "main()". -r --exclude "README"
「README」というファイルはすべて除外されています
 
15一致する前または後の3行を印刷
seq 10|grep 5–A 3より前
seq 10|grep 6–B 3以降
16一致する前後3行を印刷し、同時に出力する
seq 10 | grep 5 –C 3
ちょっと見てみましょう
使用法:grep[オプション]...PATTERN [FILE]...各FILEまたは標準入力でPATTERNを検索します.デフォルトのPATTERNは基本正規表現(BREと略記)です.例えばgrep-i'hello world'menu.h main.c
正規表現の選択と解釈:-E,--extended-regexp PATTERNは拡張可能な正規表現(EREと略称)-Fであり、--fixed-strings PATTERNは断行記号で区切られた一定の文字列のセットである.-G,--basic-regexp PATTERNは基本正規表現(BREと略す)-P,--perl-regexp PATTERNはPerl正規表現-e,--regexp=PATTERNはPATTERNでマッチング操作-f,--file=FILEはFILEからPATTERN-iを取得し,--ignore-case大文字と小文字を無視-w、--word-regexp強制PATTERN完全一致ワード-x、--line-regexp強制PATTERN完全一致1行-z、--null-data 0バイトのデータ行
-Maxは、マッチング指定行の印刷が完了した後、x行(元のファイルマッチング行の下x行)-byを印刷し、マッチング指定行の前にy行(元のファイルマッチング行の上にy行を印刷)-Czを印刷し、マッチング行の前後にz行(元のファイルマッチング行の下にz行を印刷)
インスタンス分析:
1.grep退出状態:0:成功を表す;1:提供されたファイルに一致するpatternが見つからないことを示す.2:パラメータに指定されたファイルが存在しないことを示します.次の例を示します.
/> grep 'root' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    /> echo $?
    0
    
    /> grep 'root1' /etc/passwd  #  root1    
    /> echo $?
    1
    
    /> grep 'root' /etc/passwd1  #   /etc/passwd1      
    grep: /etc/passwd1: No such file or directory
    /> echo $?
    2

2.grepに正規表現を適用する例:説明が必要なのは、次の正規表現が前編で詳細に説明されていることであるので、次の例を見るときは、前編の正規表現部分と結びつけて見ることができる.
  /> cat testfile
    northwest        NW      Charles Main           3.0     .98     3       34
    western           WE       Sharon Gray          5.3     .97     5       23
    southwest       SW       Lewis Dalsass         2.7     .8       2       18
    southern         SO       Suan Chin               5.1     .95     4       15
    southeast       SE        Patricia Hemenway    4.0     .7       4       17
    eastern           EA        TB Savage              4.4     .84     5       20
    northeast        NE        AM Main Jr.              5.1     .94     3       13
    north              NO       Margot Weber          4.5     .89     5       9
    central            CT        Ann Stephens          5.7     .94     5       13

    
    /> grep NW testfile     #   testfile     NW  。
    northwest       NW      Charles Main        3.0     .98     3       34
    
    /> grep '^n' testfile   #    n    。
    northwest       NW      Charles Main        3.0     .98     3       34
    northeast        NE       AM Main Jr.          5.1     .94     3       13
    north              NO      Margot Weber      4.5     .89     5       9
    
    /> grep '4$' testfile   #    4    。
    northwest       NW      Charles Main        3.0     .98     3       34
    
    /> grep '5\..' testfile #         5,      .  ,          。
    western         WE      Sharon Gray         5.3     .97     5       23
    southern        SO      Suan Chin             5.1     .95     4       15
    northeast       NE      AM Main Jr.            5.1     .94     3       13
    central           CT      Ann Stephens        5.7     .94     5       13
    
    /> grep '\.5' testfile  #       .5  。
    north           NO      Margot Weber        4.5     .89     5       9

    /> grep '^[we]' testfile #      w e    。
    western         WE      Sharon Gray         5.3     .97     5       23
    eastern          EA      TB Savage            4.4     .84     5       20
    
    /> grep '[^0-9]' testfile #        0-9    。
    northwest       NW     Charles Main             3.0     .98      3       34
    western          WE      Sharon Gray             5.3     .97     5       23
    southwest       SW     Lewis Dalsass           2.7     .8       2       18
    southern         SO      Suan Chin                5.1     .95     4       15
    southeast        SE      Patricia Hemenway     4.0     .7      4       17
    eastern           EA      TB Savage                4.4     .84     5       20
    northeast        NE      AM Main Jr.                5.1     .94     3       13
    north              NO      Margot Weber           4.5     .89     5       9
    central            CT      Ann Stephens            5.7     .94     5       13

    /> grep '[A-Z][A-Z] [A-Z]' testfile #                 ,                 。
    eastern          EA      TB Savage       4.4     .84     5       20
    northeast       NE      AM Main Jr.      5.1     .94     3       13

 
注意:上記のコマンドを実行する場合、grepが大文字と小文字を無視したという予想される結果が得られない場合は、現在の環境のローカライズされた設定の問題が原因となります.以上のコマンドで、現在の言語をen_に設定した場合USの場合、すべての行が印刷され、中国語環境に変更すると、現在の出力が得られます.
    /> export LANG=zh_CN  #            。
    /> export LANG=en_US  #            。
    /> export LANG=en_Br  #            。
    
    /> grep '[a-z]\{9\}' testfile #              9             。
    northwest        NW      Charles Main          3.0     .98     3       34
    southwest       SW      Lewis Dalsass         2.7     .8       2       18
    southeast        SE      Patricia Hemenway   4.0     .7       4       17
    northeast        NE      AM Main Jr.              5.1     .94     3       13
    
    #      3,       ,         ,          ,      3,      ,      3,      ,      \1  \(3\)。
    /> grep '\(3\)\.[0-9].*\1    *\1' testfile 
    northwest       NW      Charles Main        3.0     .98     3       34
    
    /> grep '\ grep '\' testfile  #        north  。
    north           NO      Margot Weber        4.5     .89     5       9
    
    /> grep '^n\w*' testfile      #      n,           。
    northwest       NW     Charles Main          3.0     .98     3       34
    northeast        NE      AM Main Jr.            5.1     .94     3       13
    north             NO      Margot Weber        4.5     .89     5       9

3.拡張grep(grep-Eまたはegrep):拡張grepを使用する主な利点は、追加の正規表現メタ文字セットを追加することです.次に、拡張grepを実証するためにインスタンスを引き続き使用します.
    /> egrep 'NW|EA' testfile     #      NW EA  。      egrep,  grep,        。
    northwest       NW      Charles Main        3.0     .98     3       34
    eastern         EA      TB Savage           4.4     .84     5       20
    
    /> grep 'NW\|EA' testfile     #    grep,           \,grep         -E。
    northwest       NW      Charles Main        3.0     .98     3       34
    eastern           EA       TB Savage           4.4     .84     5       20
    
    /> egrep '3+' testfile
    /> grep -E '3+' testfile
    /> grep '3\+' testfile        # 3             ,          3  。
    northwest       NW      Charles Main         3.0     .98     3       34
    western          WE      Sharon Gray         5.3     .97     5       23
    northeast        NE       AM Main Jr.           5.1     .94     3       13
    central            CT       Ann Stephens       5.7     .94     5       13
    
    /> egrep '2\.?[0-9]' testfile 
    /> grep -E '2\.?[0-9]' testfile
    /> grep '2\.\?[0-9]' testfile #    2  ,     0  1  ,    0 9     。
    western         WE       Sharon Gray          5.3     .97     5       23
    southwest      SW      Lewis Dalsass         2.7     .8      2       18
    eastern          EA       TB Savage             4.4     .84     5       20
    
    /> egrep '(no)+' testfile
    /> grep -E '(no)+' testfile
    /> grep '\(no\)\+' testfile   #3         ,            no  。
    northwest       NW      Charles Main        3.0     .98     3       34
    northeast        NE       AM Main Jr.          5.1     .94     3       13
    north              NO      Margot Weber      4.5     .89     5       9
    
    /> grep -E '\w+\W+[ABC]' testfile #           ,              ,     ABC    。
    northwest       NW     Charles Main       3.0     .98     3       34
    southern        SO      Suan Chin           5.1     .95     4       15
    northeast       NE      AM Main Jr.          5.1     .94     3       13
    central           CT      Ann Stephens      5.7     .94     5       13
    
    /> egrep '[Ss](h|u)' testfile
    /> grep -E '[Ss](h|u)' testfile
    /> grep '[Ss]\(h\|u\)' testfile   #3         ,  S s  ,   h  u  。
    western         WE      Sharon Gray       5.3     .97     5       23
    southern        SO      Suan Chin          5.1     .95     4       15
    
    /> egrep 'w(es)t.*\1' testfile    #west  ,  es \1  ,              ,      es     。
    northwest       NW      Charles Main        3.0     .98     3       34

4.grepオプション:grepでよく使用されるコマンドラインオプションを先にリストします.
オプション
説明
-c
一致するローの数だけが表示されますが、一致するローは特に表示されません.
-h
ファイル名は表示されません.
-i
文字列の比較時に大文字と小文字は無視されます.
-l
一致するテンプレートを含む行のファイル名リストのみが表示されます.
-L
一致するテンプレートを含まない行のファイル名リストのみが表示されます.
-n
各ローの前に、ファイル内のローの数を印刷します.
-v
検索を逆にして、一致しないローのみを表示します.
-w
完全な単語の一致のみが表示されます.
-x
完全な行の一致のみが表示されます.
-r/-R
ファイルパラメータがディレクトリの場合、このオプションはディレクトリの下にあるすべてのサブディレクトリとファイルを再帰的に検索します.
    /> grep -n '^south' testfile  #-n                。
    3:southwest     SW      Lewis Dalsass         2.7     .8      2       18
    4:southern       SO      Suan Chin               5.1     .95     4       15
    5:southeast      SE      Patricia Hemenway    4.0     .7      4       17

    /> grep -i 'pat' testfile     #-i          。
    southeast       SE      Patricia Hemenway       4.0     .7      4       17

    /> grep -v 'Suan Chin' testfile #       Suan Chin  。
    northwest       NW      Charles Main          3.0     .98     3       34
    western          WE      Sharon Gray           5.3     .97    5       23
    southwest       SW      Lewis Dalsass        2.7     .8      2       18
    southeast        SE      Patricia Hemenway   4.0     .7      4       17
    eastern           EA      TB Savage              4.4     .84     5       20
    northeast        NE      AM Main Jr.             5.1     .94     3       13
    north              NO      Margot Weber        4.5     .89     5       9
    central            CT      Ann Stephens         5.7     .94     5       13

    /> grep -l 'ss' testfile  #-l  grep         ,        。
    testfile

    /> grep -c 'west' testfile #-c  grep            。
    3

    /> grep -w 'north' testfile #-w           。
    north           NO      Margot Weber    4.5     .89     5       9

    /> grep -C 2 Patricia testfile #            。
    southwest      SW     Lewis Dalsass         2.7     .8       2       18
    southern        SO      Suan Chin              5.1     .95     4       15
    southeast       SE      Patricia Hemenway   4.0     .7      4       17
    eastern          EA      TB Savage              4.4     .84     5       20
    northeast       NE      AM Main Jr.             5.1     .94     3       13

    /> grep -B 2 Patricia testfile #          。
    southwest      SW      Lewis Dalsass         2.7     .8      2       18
    southern        SO      Suan Chin               5.1     .95    4       15
    southeast       SE      Patricia Hemenway   4.0     .7      4       17

    /> grep -A 2 Patricia testfile #          。
    southeast       SE      Patricia Hemenway   4.0     .7      4       17
    eastern           EA      TB Savage              4.4     .84     5       20
    northeast       NE       AM Main Jr.             5.1     .94     3       13