Linux Shellコマンド--grep
13446 ワード
この編から、テキストの内容操作で、テキストの操作とは違います.
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:パラメータに指定されたファイルが存在しないことを示します.次の例を示します.
2.grepに正規表現を適用する例:説明が必要なのは、次の正規表現が前編で詳細に説明されていることであるので、次の例を見るときは、前編の正規表現部分と結びつけて見ることができる.
注意:上記のコマンドを実行する場合、grepが大文字と小文字を無視したという予想される結果が得られない場合は、現在の環境のローカライズされた設定の問題が原因となります.以上のコマンドで、現在の言語をen_に設定した場合USの場合、すべての行が印刷され、中国語環境に変更すると、現在の出力が得られます.
3.拡張grep(grep-Eまたはegrep):拡張grepを使用する主な利点は、追加の正規表現メタ文字セットを追加することです.次に、拡張grepを実証するためにインスタンスを引き続き使用します.
4.grepオプション:grepでよく使用されるコマンドラインオプションを先にリストします.
オプション
説明
-c
一致するローの数だけが表示されますが、一致するローは特に表示されません.
-h
ファイル名は表示されません.
-i
文字列の比較時に大文字と小文字は無視されます.
-l
一致するテンプレートを含む行のファイル名リストのみが表示されます.
-L
一致するテンプレートを含まない行のファイル名リストのみが表示されます.
-n
各ローの前に、ファイル内のローの数を印刷します.
-v
検索を逆にして、一致しないローのみを表示します.
-w
完全な単語の一致のみが表示されます.
-x
完全な行の一致のみが表示されます.
-r/-R
ファイルパラメータがディレクトリの場合、このオプションはディレクトリの下にあるすべてのサブディレクトリとファイルを再帰的に検索します.
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