ホームページ >運用・保守 >Linuxの運用と保守 >Linux コマンド grep の概要
1. 機能
Linux システムの grep コマンドは、正規表現を使用してテキストを検索し、一致する行を出力することができる強力なテキスト検索ツールです。 grep の正式名は Global Regular Expression Print で、グローバル正規表現のバージョンを表し、その使用権限はすべてのユーザーに与えられます。
2. 形式
grep [オプション]
3. 主要パラメータ
[オプション] 主要パラメータ:
-c: 一致する行数のみを出力します。
-I: 大文字と小文字は区別されません (単一文字にのみ適用されます)。
-h: 複数のファイルをクエリするときにファイル名を表示しません。
-l: 複数のファイルをクエリする場合、一致する文字を含むファイル名のみが出力されます。
-n: 一致する行と行番号を表示します。
-s: 存在しない、または一致するテキストがないエラー メッセージを表示しません。
-v: 一致するテキストを含まないすべての行を表示します。
パターン正規表現の主なパラメータ:
: 正規表現内の特殊文字の元の意味を無視します。
^: 正規表現の開始行と一致します。
$: 正規表現の終了行と一致します。
<: 正規表現に一致する行から開始します。
>: 正規表現に一致する行の末尾へ。
[ ]: [A] などの 1 文字、つまり A が要件を満たします。
[-]: [A-Z] などの範囲、つまり A、B、C ~ Z はすべて要件を満たしています。
。 : すべて単一の文字。
*: 文字があり、長さは 0 にすることができます。
4. 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」と記述します。
5.grep コマンドの複雑な使用例
'/usr/src/Linux/Doc' ディレクトリで文字列 'magic' を含むファイルを検索しているとします:
$ grep magic /usr/src/Linux/ Doc/ *
sysrq.txt:* マジック SysRQ キーを有効にするにはどうすればよいですか?
sysrq.txt:* マジック SysRQ キーを使用するにはどうすればよいですか?
ファイル 'sysrp.txt' にはこの文字列が含まれており、議論は SysRQ の機能です。
デフォルトでは、「grep」は現在のディレクトリのみを検索します。このディレクトリの下に多くのサブディレクトリがある場合、「grep」は次のようにリストします:
grep: sound: ディレクトリです
これにより、「grep」の出力が読みにくくなる可能性があります。ここには 2 つの解決策があります:
サブディレクトリの検索を明示的に要求する: grep -r
またはサブディレクトリを無視する: grep -d Skip
大量の出力がある場合は、それを 'less' にパイプすることができます 読み取り:
$ grep magic /usr/src/Linux/Documentation/* | less
こうすることで、より便利に読むことができます。
注意すべき点は、ファイルのフィルタリング方法を提供する必要があることです (すべてのファイルを検索するには * を使用します)。忘れた場合、「grep」はプログラムが中断されるまで待機します。この問題が発生した場合は、
以下にいくつかの興味深いコマンドラインパラメータがあります:
grep -i パターンファイル: 大文字と小文字を区別せずに検索します。デフォルトでは大文字と小文字が区別されます。
grep -l パターン ファイル: 一致するファイル名のみがリストされます。
grep -L パターン ファイル: 一致しないファイル名がリストされます。
grep -w パターン ファイル: 単語全体のみが一致します。文字列の一部よりも (「magical」ではなく「magic」に一致するなど)、
grep -C 数値パターン ファイル: 一致するコンテキストは [number] 行を表示します。
pattern2 ファイル: pattern1 に一致する行を表示します。または pattern2、
grep pattern1 files | grep pattern2: pattern1 と pattern2 の両方に一致する行を表示します。
grep -n パターン ファイルは行番号情報を表示できます
grep -c パターン ファイルは合計行数を検索できます
検索用の特殊な記号もいくつかあります
< はそれぞれ先頭と をマークします言葉の終わり。
例:
grep man * は「Batman」、「manic」、「man」などに一致します。
grep ' grep ' '^': 一致した文字列が行の先頭にあることを意味します。 '$': 一致した文字列が行の末尾にあることを意味します。 Grep コマンド使用ガイド 1 パラメータ: -I: 大文字と小文字を無視します -c: 一致する行の数を出力します -l: 複数のファイルから一致する行を検索します -v: 一致する項目を含まない行を検索します -n: 行と文字を出力します一致する項目を含む行ラベル 2. RE (正規表現) 正規表現内の特殊文字の本来の意味を無視します ^ 正規表現の先頭行と一致します $ 正規表現の終了行と一致します < 一致する正規表現からの行の先頭 > 正規表現に一致する行の末尾 [ ] [A] などの 1 文字は、A が要件を満たすことを意味します [ - ] の範囲は、A、B、C を意味します。 Z はすべて要件を満たしています 。すべての単一文字 * すべての文字、長さは 0 3、たとえば # ps -ef grep in.telnetd root 19955 181 0 13:43:53 ? 0:00 in.telnetd # more size.txt サイズ ファイルの内容 b124230 b034325 a081016 m7187998 m7282064 a 022021 a061048 m9324822 b103303 a013386 b044525 m8987131 B081016 M45678 BADc2345 # more size.txt | grep '[a-b]' 範囲、つまり [A-Z]、 B、C ~ Z はすべて満たしています条件b044525 # more size.txt grep '[a-b]'* b124230 b034325 a081016 m7187998 m7282064 a022021 a061048 m9324822 b103303 a013386 b044525 m8987131 B081016 M45678 B103303 BADc2345 # more size.txt | grep 'b ' [A] などの単一文字、つまり A はリクエスト b124230 b034325 b103303 b044525 # more size.txt | grep '[bB]' b12423 0 b034325 b103303 b044525 B081016 B103303 BADc2345 # grep 'root' /etc/group root::0:root bin::2:root,bin 、デーモン sys::3 :root,bin,sys,adm adm::4: root,adm,daemon uucp::5:root,uucp mail::6:root tty::7:root,tty,adm lp::8:root,lp,adm nuucp ::9:root,nuucp daemon::12:root,daemon # grep '^root' /etc/group は、正規表現 root::0:root # grep 'uucp ' /etc/group uucp::5:root,uucp nuucp::9:root,nuucp # grep ' uucp::5:root,uucp # grep 'root$' /etc/group は正規表現の終了行と一致します root::0:root mail::6:root # その他の size.txt | grep -i 'b1..*3 ' -i : 大文字と小文字を無視します b124230 b103303 # more size.txt | 'b1..*3' -v : 一致を含まない行を検索 b034325 a0 81016 m7187998 m7282064 a022021 a061048 m932 4822 a013386 b044525 m8987131 B081016 M45678 BADc2345 # more size.txt | grep -in 'b1..*3 ' 1:b124230 9:b103303 15:B103303 # grep '$' /etc/init.d/nfs.server | wc -l 128 # grep '$' /etc/ init.d/nfs.server | wc –l 正規表現内の特殊文字の本来の意味を無視します 15 # grep '$' /etc /init.d/nfs.server case "$1" in >/tmp/sharetab.$$ [ "x$fstype" != xnfs ] && echo "$patht$rest$fstypet$ optst$desc" >>/tmp/sharetab.$ $ /usr/bin/touch -r /etc/dfs/sharetab /tmp/sharetab.$$ /usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)' if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] && if [ $startnfsd -ne 0 ]; then elif [ ! -n "$_INIT_RUN_LEVEL" ]; then while [ $wtime - gt 0 ]; do wtime=`expr $wtime - 1` if [ $wtime -eq 0 ]; then echo "使用法: $0 { start | stop }" # more size.txt テスト ファイル それらはファイルです 終わり # grep 'the' size.txt テスト ファイル それらはファイルです # grep 'the' size.txt テスト ファイル theirファイルです # grep 'the>' size.txt # grep ' # grep '<[Tt]he>' .txt テスト ファイル ====== =================================== =============== =========== 1,はじめに この php?name=%C3%FC%C1%EE" onclick="tagshow(event)" class="t_tag"> コマンドは、正規表現を使用した多目的テキスト検索ツールです。 php?name=%C3%FC%C1%EE" onclick="tagshow(event)" class="t_tag">コマンド/フィルター: g/re/p -- グローバル - 正規表現 - print . 基本形式 grepパターン[ファイル...] (1)grep検索文字列[ファイル名] (2)grep正規表現[ファイル名] ファイル内のパターンのすべての出現を検索します。パターンは次のいずれかです検索する文字列、または正規表現 注: 検索する文字列を入力するときは二重引用符 / を使用することをお勧めします。パターン マッチングに正規表現を使用する場合は、一重引用符を使用するように注意してください 2, grep オプション -c は一致する行数のみを出力します -i は大文字と小文字を区別しません (単一文字の場合) -n は一致する行番号を表示します -v は一致する行を表示しません テキスト内に行があります -s はエラー メッセージを表示しません -E は拡張正規表現を使用します その他のオプションについては、次を参照してください: man grep 3、一般的に使用される grep の例 (1) 複数のファイルのクエリ grep "sort" * .doc # ファイル名一致を参照 (2) 行一致: 一致した行数を出力 grep -c "48" data.doc # 文書内の48文字を含む行数を出力 (3) 表示一致する行と行番号 grep -n "48" data.doc #48 に一致する行と行番号をすべて表示 (4) 一致しない行を表示 grep -vn "48" data.doc #すべての行を出力します。 48を含まない行 (4) 一致しない行を表示 grep -vn "48" data.doc #48を含まない行をすべて出力 (5) 大文字と小文字を区別します grep - i "ab" data.doc #文字列 ab または Ab を含むすべての行を出力します 4, 正規表現の適用 (1) 正規表現の適用 (注: 括弧で囲まれた正規表現には一重引用符を使用することをお勧めします) grep '[ 239].' data.doc #2、3、または 9 で始まり 2 つの数字である行をすべて出力します (2) 不一致テスト grep '^[^ 48]' data.doc #最初の行とは一致しませんlineは48 (3) 拡張パターンマッチングを使う grep -E '219|216' data.doc (4) ... これは入れておく必要がある 実際に継続的に適用してまとめて、規則性をマスターする上手に表現すること。 5、クラス名を使用します 国際的なパターンマッチングにクラス名を使用できます: [[:upper:]] [A-Z] [[: lower:]] [a-z] [[:digit] :] ] [0-9] [[:alnum:]] [0-9a-zA-Z] [[:space:]] スペースまたはタブ [[:alpha:]] [a- zA- Z] (1) grep '5[[:upper:]][[:upper:]]' data.doc を使用します #5 で始まり 2 つの大文字で終わる行をクエリします 以上がLinux コマンド grep の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。