Linuxターミナルで最も一般的に使用される操作の1つは、テキストファイルの検索と、標準出力またはエラーストリームのフィルタリングです。 Linuxは、そのタスクを簡単に解決できる優れたツールであるgrepを提供します。この記事では、日常業務を確実に簡素化するgrepの最も一般的なユースケースについて説明します。
grepとは
Grepは、Global RegularExpressionPrintの略です。これは、大量のテキストファイル(ログなど)を検索する場合に非常に便利なユーティリティです。
Grepは、システム管理者、開発者、DevOpsエンジニアにとってLinux/Unixで最も役立つコマンドです。このツールの主な目的は、指定されたファイル内の文字列またはパターンをチェックすること、または他のコマンド出力をフィルタリングすることです。
前述のこのパターンは、正規表現として知られています。
grepコマンドは、検索クエリと一致するものが見つかった場合、文字列を含む行をターミナルに出力します。
grepの使用例はたくさんあるので、いつどのように使用できるか見てみましょう。
Linuxへのgrepのインストール
通常、grepはほとんどのLinuxシステムにインストールされており、小さなDockerコンテナにもインストールされています。ただし、システムにインストールされていない場合は、次のコマンドを使用してインストールできます。例:
apt-get updateapt-get install -y grep
grepの使用例
記事のこの部分では、grepを使用する最も一般的な例について説明します。
grepコマンドを使用して、指定したパターンに一致する任意のLinuxコマンド出力から任意の行を検索および印刷できます。
この例では、UbuntuシステムにどのPython3パッケージがあるかを確認します。
dpkg -l | grep python3
この例では:
-
dpkg -l </ code> インストールされているすべてのパッケージを印刷します
-
grep
dpkg
をフィルタリングしますpython3
を含む文字列のみを出力および出力します 文字列
同様に、CPUモデル情報を表示できます。例:
grep -i 'Model' /proc/cpuinfo
この例では、grepコマンドはファイル「/ etc / passwd」で文字列「root」を検索し、文字列が見つかった場合はそれを出力します。
通常、このコマンドを使用して、システムに指定された名前のユーザーアカウントがあるかどうかを確認します(例ではroot in out):
grep root /etc/passwd
複数のファイルの文字列を一度に見つけるには、grepコマンドを使用して、ファイル名を1行で指定します。正規表現を使用して、マスクでファイルを検索できます。
公開されているApacheaccess.logをダウンロードしましょう:
mkdir -p /var/log/httpd
cd /var/log/httpd
wget http://www.almhuette-raith.at/apache-log/access.log
それでは、このファイルを10000行ずつ複数のファイルに分割しましょう:
これで、ファイルを検索して500HTTPサーバーエラーを探すことができます。
grep ' 500 ' xac xad
現在の作業ディレクトリ内のすべてのファイルを検索するには、 *
を使用します パターンの後。
以下の例では、grepコマンドはすべてのファイルで500のサーバーエラーを検索します。
grep ' 500 ' *
-w
を使用 grepコマンドのオプションを使用すると、単語パターンを含むファイルを検索できます。
grep -w 'Windows XP' *
grepコマンドは、検索パターンの大文字と小文字の区別に関係なく検索を実行できるほど賢いです。
そのためには、 -i
を使用する必要があります 引数として。
これは同じ例ですが、現在、大文字と小文字を区別しないフィルタリングを行っています:
grep -i -w 'windows xp' *
-l
を使用できます 検索されたパターンを含むすべてのファイル名を表示するオプション:
grep -l -i -w 'windows xp' *
すべてのファイルでパターンが一致した回数を知りたい場合は、 -c
を追加します。 オプション:
grep -c -i -w 'windows xp' *
検索パターンの前にファイル内の行を表示するには、 -B
を追加します 引数の後にファイルから取得する数の数:
grep -B 3 -i -w 'windows xp' xaf
同様に、 -A
を使用できます 検索されたパターンの後に印刷する行数を指定する引数:
grep -A 3 -i -w 'windows xp' xaf
見つかった検索パターンの行番号を表示するには、 -n
を使用できます。 引数:
grep -n -i -w 'windows xp' xaf
次の例では、grepコマンドを使用して、特定のIPアドレスから発信されたすべてのリクエストを検索します。
検索されるすべての行は、 5.34.180.192
から開始する必要があります 用語。
grep "^5.34.180.192" xaf
$
を追加します パターンの最後に移動して、検索された文字列で終わる行を検索します:
grep "Chrome/62\" \"-\"$" xaf
検索文字列に"
が含まれるとすぐに シンボル、 \
でエスケープしています 。
grepを使用して、一度に複数のパターンを検索できます。 -e
を追加します すべての検索パターンの前の引数:
grep -e "Chrome/62\" \"-\"$" -e "15/Mar/2021:08:35:23" xaf
ここでは、 Chrome / 62 ""-"
で終わるファイル内のすべての文字列を検索しています そして 特定の日時が含まれている15/ Mar / 2021:08:35:23
。
色付きの出力では読みやすさが向上するため、 GREP_COLOR
を設定することで、好きな色に変更できます。 環境変数:
GREP_COLOR='1;35' grep --color=always 'admin' /etc/passwd
GREP_COLOR変数の詳細については、grepの公式ドキュメントを参照してください。
grepコマンドは、テキストファイルまたはコマンドの出力結果のコンテンツをフィルタリングする場合に非常に便利です。この記事では、シェルエクスペリエンスを合理化する最も一般的に使用されるgrepコマンドについて説明しました。
この記事がお役に立てば幸いです。もしそうなら、私たちがそれを世界に広めるのを手伝ってください。