KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

grep 小技集:知っておくと便利なgrepのテクニック

grep。ご存知だと思うんですが、小技を知っていると、作業が格段にスムーズになります。この記事では、grepの便利な小技を集めて解説します。上級者は大体この小技を無意識に使ってたりしますので参考にしてみてください

目次


grepとは?

grepは、指定したパターンにマッチする行をファイルから検索し、表示するためのコマンドラインツールです。名前の由来は「global regular expression print」で、正規表現を用いた強力な検索機能を提供します。主にLinuxやUnix系のシステムで使用されますが、Windowsでも利用可能です。

grepの基本的な使い方

まずは、grepの基本的な使い方を確認しましょう。以下のコマンドは、ファイル内で「error」という単語を検索します:

grep "error" logfile.txt

このコマンドを実行すると、「logfile.txt」内の「error」を含む行がすべて表示されます。まこのへんは皆さんご存知かと思います。

grep 小技集

ここでは、grepをさらに便利に使うための小技を紹介します。

1. 大文字小文字を区別せずに検索する

オプション-iを使用すると、大文字小文字を無視して検索できます。

grep -i "Error" logfile.txt

これにより、「Error」、「error」、「ERROR」など、すべてのケースが検索されます。知ってましたかね。

2. 行番号を表示する

オプション-nを使用すると、マッチした行の行番号が表示されます。

grep -n "function" script.js

出力例:

15:function add(a, b) {
30:function subtract(a, b) {

これにより、該当行の位置を簡単に特定できます。

たまに、

cat -n script.js | grep "function"

ってやってる人を見かけることがあります。 別にこれでもいいんですけどね。grepだけでもできます。

3. マッチしたファイル名のみを表示する

オプション-lを使用すると、マッチしたファイル名だけを表示します。

grep -l "TODO" *.js

出力例:

app.js
utils.js

これにより、特定の文字列を含むファイルを素早く特定できます。

4. ディレクトリを再帰的に検索する

オプション-rまたは-Rを使用すると、ディレクトリ内のすべてのファイルを再帰的に検索します。

grep -r "initialize" src/

これにより、「src」ディレクトリ内のすべてのファイルで「initialize」を検索します。これも find コマンドの -exec grep ってやって使ってる場合を見かけますが grep だけでできます。

5. パターンを正規表現で検索する

オプション-Eを使用すると、拡張正規表現を利用した検索が可能になります。拡張正規表現使いたいがために python とか使ってるのも見かけますが、実は不要です。

grep -E "function|class" script.js

このコマンドは、「function」または「class」を含む行を検索します。

6. 色付きでマッチ部分を強調表示する

オプション--colorを使用すると、マッチした部分が色付きで表示され、視認性が向上します。

grep --color "searchTerm" file.txt

色付き表示により、該当部分をすぐに見つけることができます。すいません。記事のかさ増しです。あんま使いません・・・。スクリプトの中で grep コマンド使う、っていうような場合は便利な場合もあるかもしれないですが、実務では使ったことないっすね

7. 行数をカウントする

オプション-cを使用すると、マッチした行の数をカウントして表示します。

grep -c "error" logfile.txt

出力例:

5

この例では、「error」が5回出現していることがわかります。

grepの応用テクニック

基本的な小技に加えて、grepをさらに活用するための応用テクニックを紹介します。

1. パイプと組み合わせて使用する

grepは他のコマンドとパイプで組み合わせて使用することで、強力な検索が可能になります。grep って基本的にパイプの中で使うもんなんで、パイプは使いこなせる用になっておいてください。

ps aux | grep "nginx"

このコマンドは、実行中のプロセスの中から「nginx」を含むものを検索します。

2. ファイル名を含めて検索する

オプション-Hを使用すると、マッチした行のファイル名を常に表示します。

grep -H "main" *.js

複数のファイルを検索する際に有効です。

3. 逆検索(マッチしない行を表示する)

オプション-vを使用すると、指定したパターンにマッチしない行を表示します。

grep -v "DEBUG" logfile.txt

デバッグ情報を除外したログを表示するのに便利です。これは一番使うのは自分自身にマッチしないようにっていうパターンですよねパイプの中で、grep -v grepってやってる人は多いと思います。デバッグ情報を取り除くだけじゃなくて、応用範囲が広いので、-v は調べなくても手癖で出てくるようにしといてください。

4. 特定の文字列を含む行のみを表示する

オプション-wを使用すると、完全な単語として検索できます。word の略です。覚えてください。

grep -w "TODO" script.js

「TODO」という単語のみをマッチさせ、「TODOS」や「METHODO」などの部分一致を避けます。

5. 行の前後を表示する

オプション-A-B-Cを使用すると、マッチした行の前後の行も表示できます。

grep -C 2 "error" logfile.txt

このコマンドは、「error」を含む行の前後2行も一緒に表示します。after, before の略って覚えてください。cは、、、まあ、a と b があるから c だよね。

6. バイナリファイルを無視して検索する

オプション-Iを使用すると、バイナリファイルを無視して検索できます。

grep -I "searchTerm" *

テキストファイルのみを対象に検索する際に有効です。-r を使う場合、これ使っとくと安全ですよね。

grepを使いこなすためのヒント

grepをさらに効果的に活用するためのヒントをいくつか紹介します:

  • 正規表現を学ぶ:grepの強力な機能を最大限に活用するために、正規表現の基本を理解しましょう。
  • エイリアスを設定する:よく使うオプション(かならず使うオプション)を含めたエイリアスを設定することで、コマンド入力を簡略化できます。
  • 結果をファイルに保存する:検索結果をファイルにリダイレクトして、後で参照できるようにしましょう。
  • 他のツールと組み合わせる:awkやsedなどのテキスト処理ツールと組み合わせることで、より高度な操作が可能になります。

他のコマンドとの組み合わせで、grepは力を発揮するツールです。

まとめ

ってなことで、grepはシンプルながら強力なテキスト検索ツールです。基本的な使い方をマスターするだけでなく、小技や応用テクニックを活用することで、作業効率を大幅に向上させることができます。この記事で紹介した小技集を参考に、ぜひgrepを日常の開発業務に取り入れてみてください。

開発だけじゃなくて、日々の作業にもgrepの使いこなしは重要です。


参考資料