Linux の運用と保守のための一般的なコマンドの分析: grep

grep

強力なテキスト検索ツール

補足

grep (グローバル検索正規表現 (RE) と行の出力、正規表現の包括的な検索と行の出力) は、正規表現を使用してテキストを検索し、一致する行が出力される強力なテキスト検索ツールです。フィルタリング/検索用の特定の文字。正規表現はさまざまなコマンドと組み合わせて使用​​できるため、非常に柔軟に使用できます。

オプション

-a --text # バイナリ データを無視しません。
-A <表示行数> --after-context=<表示行数> # テンプレートのスタイルに従った行を表示するとともに、その行以降の内容を表示します。
-b --byte-offset # テンプレートのスタイルに一致する行の外側に、その行の前のコンテンツを表示します。
-B<表示行数> --before-context=<表示行数> # スタイルに合った行を表示するだけでなく、その行の前に内容を表示します。
-c --count # テンプレート スタイルに一致する列の数をカウントします。
-C<表示行数> --context=<表示行数> または -<表示行数> # テンプレートのスタイルに従った列を表示するとともに、その列の前後の内容を表示します。
-d<action> --directories=<action> # このパラメータは、検索対象のディレクトリがファイルではないことが指定されている場合に使用する必要があります。そうでない場合、grep コマンドは情報を報告し、アクションを停止します。
-e<テンプレート スタイル> --regexp=<テンプレート スタイル> # ファイルの内容を検索するためのテンプレート スタイルとして文字列を指定します。
-E --extended-regexp # テンプレート スタイルを拡張共通表現として使用します。これは、拡張正規表現が使用できることを意味します。
-f<テンプレート ファイル> --file=<ルール ファイル> # テンプレート ファイルを指定します。その内容には 1 つ以上のテンプレート スタイルがあり、grep でテンプレートの条件を満たすファイルの内容を検索します。形式はそれぞれのテンプレート スタイルです。桁。
-F --fixed-regexp # テンプレート スタイルを固定文字列のリストとして扱います。
-G
-h --no-filename # テンプレート スタイルに準拠する列を表示する前に、その列が属するファイル名を指定しないでください。
-o # ファイルの一致した部分のみを出力します。
-H --with-filename # テンプレート スタイルに準拠する列を表示する前に、列のファイル名をマークします。
-i --ignore-case # 大文字と小文字の違いを無視します。
-l --file-with-matches # コンテンツが指定されたテンプレート スタイルと一致するファイル名をリストします。
-L --files-without-match # コンテンツが指定されたテンプレート スタイルと一致しないファイル名をリストします。
-n --line-number # テンプレート スタイルに一致する行を表示する前に、行番号をマークします。
-P --perl-regexp # PATTERN は Perl 正規表現です。
-q --quit または --silent # 情報を表示しません。
-R/-r --recursive # このパラメータの効果は、「-d recurse」パラメータを指定した場合と同じです。
-s --no-messages # エラー メッセージを表示しません。
-v --revert-match # 一致を逆にします。
-V --version # バージョン情報を表示します。
-w --word-regexp # すべての単語に一致する列のみを表示します。
-x --line-regexp # すべての列に一致する列のみを表示します。
-y # このパラメータは「-i」と同じ効果があります。
-m <num> --max-count=<num> # num 行の結果が見つかったら検索を停止します。一致する行の数を制限するために使用されます。

正規表現

^ # 次のようなアンカー行の先頭は、「^grep」で始まるすべての行と一致します。
$ # 行の終わりをアンカーします。例: 'grep$' は、grep で終わるすべての行に一致します。
. # 次のような非改行文字と一致します: 'gr.p' は、gr の後に任意の文字が続き、次に p と一致します。
* # 次のような 0 個以上の前の文字と一致します。 '*grep' は、その後に grep 行が続く 1 つ以上のスペースすべてに一致します。
.* # 任意の文字を表すために一緒に使用されます。
[] # 指定された範囲内の文字に一致します。たとえば、「[Gg]rep」は Grep と grep に一致します。
[^] # 指定された範囲内にない文字と一致します。例: '[^A-FH-Z]rep' は、AR と TZ を含まない文字で始まり、その後に rep が続く行と一致します。
\(..\) # '\(love\)' などの一致する文字をマークします。love は 1 としてマークされます。
\< # 単語の先頭をアンカーします。次のようになります。 '\<grep' は、grep で始まる単語を含む行に一致します。
\> # 単語の末尾を固定します。「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 の後に 0 個以上の英数字、その後に p が続くものと一致します。
\W # \w の反転形式は、ドット、ピリオドなどの 1 つ以上の非単語文字と一致します。
\b # ワード ロック文字 (例: '\bgrep\b') は grep のみに一致します。

grepコマンドの一般的な使用法

ファイル内の単語を検索するには、コマンドは「match_pattern」を含む行を返します。

grep match_pattern ファイル名
grep "match_pattern" ファイル名

複数のファイルを検索します。

grep "match_pattern" file_1 file_2 file_3 ...

-vオプションを除くすべての行を出力します

grep -v "match_pattern" ファイル名

一致する色をマーク--color=autoオプション:

grep "match_pattern" ファイル名 --color=auto

正規表現-Eオプションを使用します。

grep -E "[1-9]+" 
# または
egrep "[1-9]+"

正規表現-Pオプションを使用します。

grep -P "(\d{3}\-){2}\d{4}" ファイル名

-oオプションに一致するファイルの部分のみを出力します

echo これはテスト行です。| grep -o -E "[az]+\." 
ライン。

echo これはテスト行です。| egrep -o "[az]+\." 
ライン。

一致する文字列-cオプションを含むファイルまたはテキスト内の行数をカウントします

grep -c "テキスト" ファイル名

一致した文字列-nオプションを含む行数を出力します

grep "text" -n ファイル名
# または
cat ファイル名 | grep "text" -n 

#複数のファイル
grep "text" -n file_1 file_2

パターンが一致する文字またはバイトのオフセットを出力します。

echo Gun is not unix | grep -b -o "not" 
7:not 
# 行内の文字列の文字値は行の最初の文字から計算され、初期値は 0 です。オプション **-b -o** は通常、常に一緒に使用されます。

複数のファイルを検索し、一致するテキストが含まれるファイルを見つけます。

grep -l "テキスト" file1 file2 file3...

grep はファイルを再帰的に検索します

複数レベルのディレクトリ内のテキストを再帰的に検索します。

grep "text" . -r -n 
# . 現在のディレクトリを示します。

パターンの一致では大文字と小文字は無視されます。

エコー「ハローワールド」 | grep -i "HELLO" 
# こんにちは

オプション-e は、複数の一致パターンを制限します。

echo this is a text line | grep -e "is" -e "line" -o 
is 
line 

#**-f** オプションを使用して複数のスタイルに一致させ、一致させる必要がある行を書き出すこともできます。スタイルファイルの文字を一行ずつ。
cat patfile 
aaa 
bbb 

echo aaa bbb ccc ddd eee | grep -f patfile -o

指定したファイルを grep 検索結果に含めるか除外します。

# ディレクトリ内のすべての .php および .html ファイルで文字「main()」のみを再帰的に検索します
grep "main()" . -r --include *.{php,html} 

# すべての README ファイルを検索結果から除外します
grep "main()" . -r --exclude "README" 

# filelist ファイルリスト内のファイルを検索結果から除外します
grep "main()" . -r --exclude-from filelist

値 0 のバイト接尾辞を持つ grep および xargs:

# テストファイル: 
echo "aaa" > file1 
echo "bbb" > file2 
echo "aaa" > file3 

grep "aaa" file* -lZ | xargs -0 rm 

# 実行後、file1 と file3 は削除され、- で grep 出力されます。 Z オプションは、値ゼロのバイトをターミネータ ファイル名 (\0) として指定します。xargs -0 は入力を読み取り、ファイル名を値ゼロのバイト ターミネータで区切ってから、一致するファイルを削除します。-Z は通常、- と組み合わせて使用​​されます。 l.

grep はサイレントに次のように出力します。

grep -q "test" filename 
# 情報は出力されません。コマンドが正常に実行された場合は 0 が返され、失敗した場合は 0 以外の値が返されます。通常は条件付きテストに使用されます。

一致するテキストの前後の行を出力します。

# 特定の結果と一致した後の 3 行を表示し、-A オプションを使用します: 
seq 10 | grep "5" -A 3 
5 
6 
7 
8 
#
特定の結果と一致する前に 3 行を表示し、-B オプションを使用します: 
seq 10 | grep "5" -B 3 2 
3 
4 
5 
#
特定の結果に一致する最初の 3 行と最後の 3 行
を表示するには
seq 10 | grep "5" -C 3 
2 
3 
4 
5 
6 
7 
8
 
# 複数の一致結果がある場合、「--」が各一致結果の間の区切り文字として使用されます: 
echo -e "a\nb\nc\na\nb\nc" | grep a -A 1 
a 
b 
-- 
a 
b

おすすめ

転載: blog.csdn.net/zy_dreamer/article/details/132177769