ホームページ  >  記事  >  運用・保守  >  Linux コマンド grep の概要

Linux コマンド grep の概要

巴扎黑
巴扎黑オリジナル
2017-09-04 14:12:052305ブラウズ

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 '' は 'man' のみに一致し、'Batman' や 'manic' などの他の文字列には一致しません。

'^': 一致した文字列が行の先頭にあることを意味します。

'$': 一致した文字列が行の末尾にあることを意味します。

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。