Linux で Grep コマンドを使用する方法 [12 の便利な例]
ファイル内の特定の文字列またはパターンを検索するというタスクに直面したことはありますが、どこから探し始めればよいかわからないということはありませんか?さて、これが助けとなる grep コマンドです。
grep は、Linux のすべてのディストリビューションに搭載されている強力なファイル パターン検索ツールです。何らかの理由でシステムにインストールされていない場合は、次のようにパッケージ マネージャーを介して簡単にインストールできます。
sudo apt install grep [On Debian, Ubuntu and Mint]
sudo yum install grep [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
sudo emerge -a sys-apps/grep [On Gentoo Linux]
sudo apk add grep [On Alpine Linux]
sudo pacman -S grep [On Arch Linux]
sudo zypper install grep [On OpenSUSE]
grep コマンド を実際に使用する最も簡単な方法は、実際に実際の例をいくつか使用してみることです。
1. Linux でのファイルの検索と検索
新しい Ubuntu の新しいコピーをマシンにインストールし、Python スクリプトを試してみるとします。
チュートリアルを探して Web を探し回っていますが、Python の 2 つの異なるバージョンが使用されていることがわかり、インストーラーによって Ubuntu にどのバージョンの Python がインストールされるかわかりません。モジュールがインストールされているかどうか。
以下に示すように、grep を使用して次の dpkg コマンドを実行するだけです。
dpkg -l | grep -i python
まず、dpkg –l
を実行しました。これにより、システムにインストールされている *.deb
パッケージが一覧表示されます。次に、その出力を grep -i python
にパイプしました。これは単純に「grep に移動してフィルタリングし、「python」が含まれるすべてを返します。」 」
-i
オプションは、grep では大文字と小文字が区別されるため、大文字と小文字を無視するためにあります。 -i
オプションを使用することは、より具体的な検索を目的としている場合を除いて、身に付ける良い習慣です。
2. Linux でのファイルの検索とフィルタリング
grep を使用して、個々のファイルまたは複数のファイル内で検索およびフィルタリングすることもできます。次のシナリオを考えてみましょう。
あなたはApache Web サーバーで問題が発生しており、ネット上にある数多くの素晴らしいフォーラムの 1 つに助けを求めています。
あなたに返信した親切な魂は、/etc/apache2/apache2.conf ファイルの内容を投稿するようあなたに求めてきました。コメント行をすべて削除できたら、あなたにとっても、あなたを手伝ってくれている人にとっても、そしてそれを読んでいる人全員にとっても楽だと思いませんか?まあ、できますよ!これを実行するだけです:
grep -v ^\# /etc/apache2/apache2.conf | grep .
-v
オプションは、grep に出力を反転するよう指示します。つまり、一致する行を出力する代わりに、その逆を実行して、式に一致しないすべての行を出力します。この場合、#
行がコメント化されています。
すべての空行の出力を非表示にするために、最後に grep .
も使用していることに注意してください。この方法では、ターミナルの構成設定のみが表示されます。
3. Linux ですべての .mp3 ファイルを検索する
grep は、stdout からフィルタリングする場合に非常に役立ちます。たとえば、フォルダー全体がさまざまな形式の音楽ファイルでいっぱいだとします。
アーティスト JayZ のすべての *.mp3
ファイルを検索したいと考えていますが、リミックスされたトラックは必要ありません。いくつかのgrep パイプを使用して find コマンド を使用すると、うまくいきます。
find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”
この例では、find を使用して *.mp3
拡張子を持つすべてのファイルを出力し、それを grep –i
にパイプしてフィルタリングしています。 「JayZ 」という名前のすべてのファイルを出力して出力し、次に grep –vi
への別のパイプを実行します。これによりフィルタリングされ、文字列を含むすべてのファイル名は出力されません(いずれの場合も)。 「リミックス」。
4. 検索文字列の前後の行数を表示する
もう 1 つのオプションは、-A
スイッチと -B
スイッチです。これらは、一致した行と、検索文字列の前後にある行数を表示します。
man ページにはより詳細な説明が記載されていますが、-A
=after および -B
=< というオプションを覚えておくのが最も簡単だと思います。strong>前:
ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP
5. 一致の周囲の行数を出力します
grep の -C
オプションは似ていますが、文字列の前後にある行を出力するのではなく、どちらかの方向に行を出力します。
ifconfig | grep -C 2 lo
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 15314 bytes 1593769 (1.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
6. 一致数を数える
grep 文字列を単語数にパイプする (wc コマンド) のと同様に、grep の組み込みオプションを使用して同じことを実行できます。
ifconfig | grep -c inet6
7. Linux で指定された文字列によるファイルの検索
grep の –n
オプションは、コンパイル エラー中にファイルをデバッグするときに非常に役立ちます。指定された検索文字列のファイル内の行番号を表示します。
grep -n "main" setup.py
8. すべてのディレクトリで文字列を再帰的に検索します
現在のディレクトリとすべてのサブディレクトリで文字列を検索したい場合は、–r
オプションを指定して再帰的に検索できます。
grep -r “function” *
9. パターン全体を検索する
-w
オプションを grep に渡すと、文字列内のパターン全体が検索されます。たとえば、次のように使用します。
ifconfig | grep -w "RUNNING"
引用符で囲まれたパターンを含む行を出力します。一方、次のようにしてみると、
ifconfig | grep -w "RUN"
パターンではなく単語全体を検索しているため、何も返されません。
10. Gzip 圧縮されたファイル内の文字列を検索する
grep の派生関数についてはいくつか言及する価値があります。 1 つ目は zgrep で、zcat と同様、gzip 圧縮 ファイルで使用します。これは grep と同じオプションを受け取り、同じ方法で使用されます。
zgrep -i error /var/log/syslog.2.gz
11. ファイル内の正規表現と一致する
egrep コマンドは、「拡張グローバル正規表現」を表すもう 1 つの派生コマンドです。 at + ? などの追加の式メタ文字を認識します。 |
と ()
。
egrep コマンドは、必要に応じてソース ファイルや他のコード部分を検索するのに非常に便利です。 -E
オプションを指定すると、通常のgrep から呼び出すことができます。
grep -E
12. 固定パターン文字列の検索
fgrep コマンドは、ファイルまたはファイルのリストで固定パターン文字列を検索します。 grep -F
と同じです。 fgrep を使用する一般的な方法は、パターンのファイルをそれに渡すことです。
fgrep –f file_full_of_patterns.txt file_to_search.txt
これはgrep の単なる出発点ですが、おそらくおわかりのとおり、さまざまな目的で非常に貴重です。私たちが実装した単純な 1 行コマンドとは別に、grep を使用すると、強力なcron ジョブや堅牢なシェル スクリプトを作成できます。始める。
創造力を発揮してマニュアル ページのオプションを試し、 独自の目的に適したgrep 式を考え出しましょう。