特定の文字列やパターンをファイルで検索するという作業に直面したことがありますか?その場合は、救世主として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]
I have found that the easiest way to get your feet wet with the grep command is to just dive right in and use some real-world examples.
1. Linuxでファイルを検索して見つける
まず、マシンに新しいUbuntuの新しいコピーをインストールしたばかりで、Pythonスクリプティングを試してみるつもりです。
チュートリアルを探し回っていますが、使用されているPythonのバージョンが2つあり、UbuntuにインストールされているPythonのバージョンがわからず、また、モジュールがインストールされているかどうかもわかりません。
次のdpkgコマンドをgrepとともに実行するだけです:
dpkg -l | grep -i python

最初に、dpkg –l
を実行しました。これにより、システムにインストールされている*.deb
パッケージがリストされます。次に、その出力をgrep -i python
にパイプしました。これは単に、「python」を含むすべてをフィルタリングして返すようにgrepに指示します。
-i
オプションは、grepが大文字と小文字を区別するため、無視するように設定されています。より特定の検索を行う場合を除いて、-i
オプションを使用することは良い習慣です。
2. Linuxでファイルを検索してフィルタリングする
grepは、個々のファイルまたは複数のファイル内で検索およびフィルタリングするためにも使用できます。このシナリオを考えてみましょう:
あなたはApache Web Serverでいくつかの問題を抱えており、ネット上の多くの素晴らしいフォーラムの1つに助けを求めました。
あなたに返信した優しい人は、/etc/apache2/apache2.confファイルの内容を投稿するように求めています。コメント行をすべて削除した方が、あなた、あなたを助ける人、それを読んでいるすべての人にとって簡単ではないでしょうか?もちろんできます!次のコマンドを実行するだけです:
grep -v ^\# /etc/apache2/apache2.conf | grep .
-v
オプションは、grepに対して出力を反転させるように指示します。つまり、一致する行を表示するのではなく、逆に、この場合は#
で始まるコメント行以外のすべての行を表示します。
すべての空行の出力を非表示にするために、最後にgrep .
も使用しました。これにより、ターミナルで設定のみが表示されます。

3. Linuxですべての.mp3ファイルを見つける
grepはstdoutからフィルタリングするのに非常に便利です。たとえば、さまざまな形式の音楽ファイルがたくさん入ったフォルダー全体があるとします。
アーティストJayZの*.mp3
ファイルをすべて見つけたいけど、リミックスされたトラックは不要です。いくつかのfindコマンドとgrepパイプを使用すると、簡単にできます。
# find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”
この例では、findを使用して*.mp3
拡張子のすべてのファイルを表示し、それをgrep –i
にパイプして名前が”JayZ“のすべてのファイルをフィルタリングして表示し、さらに別のパイプを使用してgrep –vi
で文字列(大文字小文字を区別しない)が”remix“のすべてのファイル名をフィルタリングして表示しません。
[ 他にもこちらがおすすめです:Linux Findコマンドの実用的な例35選 ]
4. 検索文字列の前後の行数を表示する
別のオプションとして-A
および-B
スイッチがあります。これらは、検索文字列の前後に表示する行数を示します。
-A
= 後、-B
= 前:
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のビルトインオプションは、grep文字列をワードカウント(wcコマンド)にパイプするのと同様に機能します。
# 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. Gzippedファイル内で文字列を検索する
注目に値するのは、grepの派生物です。最初のものはzgrepで、これはzcatと同様で、gzippedファイルに使用されます。オプションはgrepと同じであり、同じ方法で使用されます:
# zgrep -i error /var/log/syslog.2.gz

11. ファイル内の正規表現の一致
egrepコマンドは、「Extended Global Regular Expression」の派生物です。これはat + ? |
や()
などの追加の表現メタキャラクターを認識します。
egrepコマンドはソースファイルやコードの他の部分を検索するのに非常に便利です。必要な場合は、通常のgrepから-E
オプションを指定して呼び出すことができます。
grep -E
12. 固定パターン文字列を検索する
fgrepコマンドは、ファイルまたはファイルのリストを固定パターン文字列で検索します。これはgrep -F
と同じです。fgrepを使用する一般的な方法は、パターンのファイルを渡すことです:
fgrep –f file_full_of_patterns.txt file_to_search.txt
これはgrepの始めの一歩ですが、おそらくお分かりのように、さまざまな目的に不可欠です。私たちが実装した単純な一行のコマンド以外に、grepは強力なcronジョブや堅牢なシェルスクリプトを書くために使うことができます。
創造的で、manページのオプションを試してみて、自分自身の目的に役立つgrep式を考え出してください!
Source:
https://www.tecmint.com/12-practical-examples-of-linux-grep-command/