GNU/Linux >> Linux の 問題 >  >> Linux

Grepコマンドを使用してファイル内のテキストを検索する方法

LinuxおよびUNIXライクなシステムでは、すべてのシステム構成情報がプレーンテキスト形式で保存および操作されます。したがって、テキストの検索は、編集とログ分析の非常に一般的なタスクになります。

grepコマンドを使用すると、ファイル内またはコマンドの出力コンソールから、正規表現に一致する用語またはパターンを検索できます。 grepが行内で一致を見つけると、結果を画面、つまりstdoutにコピーします。

このチュートリアルでは、実際の例を使用してgrepコマンドを使用する方法を学習します。

Grepコマンド

使用法の説明を始める前に、grepコマンドの構文を確認しましょう。

grep [OPTIONS] PATTERN [FILE...]

検索に使用できる最も一般的なgrepオプションとパターンについて詳しく説明します。

ファイル内の文字列を検索する方法

以下の例では、grepは/ etc / passwdファイルで文字列「root」を検索し、出力をstdoutにリダイレクトします。

$ grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

複数のファイルからテキストを検索

次のコマンドを使用して、複数のファイルから特定のテキストを検索できます。

$ grep "root" /etc/passwd /etc/group
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/group:root:x:0:root
/etc/group:bin:x:1:root,bin,daemon
/etc/group:daemon:x:2:root,bin,daemon
/etc/group:sys:x:3:root,bin,adm
/etc/group:adm:x:4:root,adm,daemon
/etc/group:disk:x:6:root
/etc/group:wheel:x:10:root

grepの大文字と小文字を区別しない検索

オプション-i 指定された文字列/パターンの大文字と小文字を区別せずに検索します。

次の例では、grepは「hal」、「HAL」などのすべての単語と大文字と小文字を区別せずに一致します。

$ grep -i HAL /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

再帰検索

再帰検索は、-rを使用して実現されます シンボリックリンクをスキップするすべてのファイルを再帰的に検索するオプション。シンボリックリンクを含める場合は、-Rを使用します 。

次の例では、grepコマンドは/var内のすべてのファイルで文字列「ngnix」を検索します ディレクトリ。

$ grep -r nginx /var

コマンド出力(stdout)で文字列を検索する

コマンドの出力をパイプし、その出力からパターンのgrepを使用できます。

次の例では、lsコマンドを使用して「backup」という名前のファイルを検索しています

$ ls | grep backup

ここでは、複数のパイプを実行し、psコマンドから「docker」および「apache」プロセスを検索しています。

$ ps -ef | grep docker | grep apache

ファイル内の正規表現

正規表現は、各入力行に一致するパターンです。 BasicとExtendedは、grepコマンドで使用される2つの正規表現です。

基本的な正規表現

デフォルトでは、grepはパターンを基本的な正規表現として解釈します。

^(カレット)記号-それに続くパターンは、各行の先頭にある必要があります。次の例では、文字列^welcomeは行の先頭にある場合にのみ一致します。

$ grep “^welcome” filename

拡張正規表現

-Eを使用する (または--extended-regexp)オプション(grepに拡張正規表現として理解させたい場合)。

次のコマンドは、ファイルからすべてのリンクを抽出します

$ grep –Eoi '<a[^>]+>.*</a>' filename

o :デフォルトでは、grepは検索パターンを含む行全体を出力します。このオプションは、grepコマンドに、行全体ではなく、一致する単語のみを出力するように指示します。

i :このオプションは、パターンの一致中に大文字と小文字を無視するようにgrepコマンドに要求します。

grepを使用して単語全体を検索

-w (word-regexp)grepのフラグは、指定された式が単語全体にのみ一致するようにします。

$ grep -iw "samba" /etc/samba/smb.conf
# This is the main Samba configuration file. You should read the
# here. Samba has a huge number of configurable options (perhaps too
# For a step to step guide on installing, configuring and using samba,
# read the Samba-HOWTO-Collection. This may be obtained from:

文字列が一致した後に行を表示する

-A Nを表示するオプション 文字列が一致した後の行。

$ grep -A 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

文字列が一致する前に行を表示する

-Bを使用できます 特定のファイルの文字列の前にN行を表示するオプション

$ grep -B 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
--
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

複数の文字列を検索

OR演算子|を使用して、複数のパターンまたは文字列を検索できます および\|-E (extended-regexp)は、特定の特殊文字をエスケープする必要があるかどうかを制御します。 -e 厳密には、照合するパターンを示すためのフラグです。

例1:-Eオプションの使用

$ ls | grep -E “li|ovo”
linux24
ovo8_linux24.sh

または

$ grep -E "foo|bar" *.txt

例2:-Eなし

$ ls | grep ‘li\|ovo’
linux24
ovo8_linux24.sh

または

$ grep "foo\|soul\|bar" *.txt

特定のファイルを検索から除外する

-vオプションを使用して、検索を無視できます。次のコマンドは、「syslog.log」を除くすべてのファイルで文字列「error」を検索します

$ grep -r error * | grep -v ‘/\syslog.log/’

結論

このチュートリアルでは、grepコマンドを使用してファイル内のテキストを検索する方法を学びました。これを楽しんで読んでいただければ幸いです。以下のコメントセクションに提案を残してください。


Linux
  1. Linuxコマンド:テキストファイルのみを「検索」する方法は?

  2. Linux で特定のテキストを含むすべてのファイルを見つけるにはどうすればよいですか?

  3. パターンに一致するファイルを削除するために find コマンドを使用する方法は?

  1. Linuxgrepコマンドの使用方法

  2. テキスト文字列を含まないすべてのファイルを検索するにはどうすればよいですか?

  3. ファイル内の複数の文字列を見つける方法は??

  1. Linux/UNIXでgrepコマンドを使用する方法

  2. Linux の find コマンドを使用してファイルを検索する方法

  3. Linuxでテキストを含まないテキストファイルを見つける方法は?