HapInS Developers Blog

HapInSが提供するエンジニアリングの情報サイト

【Tips】grepの検索結果をカラフルに表示したら気分アゲアゲで業務効率も爆上がりすると祖母が申しておりました

こんにちは。Linuxコマンドライン大好き!ponです。

はじめに

Linuxのコマンドの用途は、ファイルの管理、特定のコンテンツの検索、さまざまなタスクの実行など多岐に渡ります。

この記事ではコマンドラインの実行をより楽しいものとするために、出力に視覚的な魅力を加える色の設定について探ってみたいと思います。 今回はgrepの検索結果を黄色でハイライトすることから〜カラーテーマのカスタマイズまで、ターミナルを明るく彩るためのヒントをご紹介します。

そもそもgrepって?

まずは「grepってなに?おいしいの?」という方向けに、 そもそもgrepがどんなコマンドで、何に使うのかを説明します。

grepコマンドは、Linuxシステム上でテキストファイルから特定の文字列を検索するために使用されるコマンドです。 初心者の方にも分かりやすく説明すると、grepコマンドはテキストの中から特定の単語やフレーズを探し出す魔法の道具のようなものです。

例えば、あなたが探している本の中に「hoge」という単語がどこかに書かれているとします。 grepコマンドを使うと、その本の中から「hoge」という単語を探し出すことができます。

使い方はとても簡単で、コマンドラインで以下のように入力します。

grep 検索したい単語 ファイル名

例えば、「hoge」という単語を探す場合は、以下のように入力します。

grep hoge book.txt

すると、grepコマンドは指定したファイル(book.txt)の中から「hoge」という単語を探し出し、見つかった行を表示します。

grepコマンドは大文字と小文字を区別するため、例えば「HOGE」と「hoge」は異なる単語として扱われます。 ただし、オプション-iを使うことで、以下のように大文字と小文字を区別しないようにすることもできます。

grep -i hoge book.txt

また、複数のファイルを検索することもできます。例えば、複数の本の中から「hoge」という単語を探す場合は、以下のように入力します。

grep hoge book1.txt book2.txt book3.txt

grepコマンドは非常に便利で、テキストファイルの中から特定の情報を探すのに役立ちます。 たとえLinuxにあまり詳しくない方でも、grepコマンドを使うことで自分の探している情報を簡単に見つけることができるようになります。

【基本】grepの結果を黄色くハイライトする

それでは、grepが何に使われるのかを理解したところで本題に移りましょう。

デフォルトでは、grepは条件にマッチした検索結果をカラフルに表示してくれません。しかし、--colorオプションを使用することで、grepの検索結果を見やすくハイライト表示することができます。ここではgrepの検索結果を黄色くハイライトするために、GREP_COLOR環境変数を活用します。以下の行を~/.bashrcファイルに追加しましょう。

export GREP_COLOR='1;33'

ファイルを保存し、source ~/.bashrcを実行するか、ターミナルを再起動します。これで、grepコマンドを実行すると、条件にマッチする検索結果が黄色でハイライトされ、見つけやすくなります。

例: "hoge"という単語をファイル "piyo.txt"内で検索し、条件にマッチした結果を黄色でハイライトする場合

grep --color=auto "hoge" piyo.txt

grepの結果をハイライトしてみたイメージ

私は毎度 GREP_COLORgrep --color=autoと打ち込むのが億劫なので、bashrcに以下のようにエイリアスを追記しています。

alias gc='GREP_COLOR='\''01;33'\'' grep --color=always'
alias g='GREP_COLOR='\''01;33'\'' grep --color=always -e '\''^'\'' -e'

エイリアスgcは、grep条件に合致する文字列が含まれた行のみ出力し、grep条件に合致した文字列をハイライトします。

(※上記のgrepの結果を黄色くハイライトしたケースと同じ結果が得られます)

エイリアスgは、grep条件とは関係ない行も含めて全て出力し、grep条件に合致した文字列をハイライトします。

エイリアスgを使用した場合のイメージ。ログを時系列で追いながら、キーワードの前後も確認したい時に使っています。 ※実際にエイリアスgを使用する際は、headtail +行数を制限するオプションを活用してある程度表示する文字列を減らした上でmoreless -Rなどで出力結果を確認するなどの対策をしないと、ターミナルが出力の大洪水でとんでもないことになるのでご注意ください。

(下記はあくまで一例)

g "hoge" piyo.txt | tail -50 | less -R

less-Rオプションを付与している理由は後述。

【応用】カラーテーマのカスタマイズ

黄色だけではなく、その他にも多彩な色でターミナルのカラーテーマをカスタマイズすることができます。

※下記表を参考に、先ほどのexport GREP_COLOR='パラメータ'でセットするか、直接GREP_COLORコマンドを打つことで色を変更できます。

パラメータ 説明
0 リセット(デフォルトのテキストと背景色)
1 太字
4 下線
7 反転
30 黒色のテキスト
31 赤色のテキスト
32 緑色のテキスト
33 黄色のテキスト
34 青色のテキスト
35 マゼンタのテキスト
36 シアンのテキスト
37 白色のテキスト
40 黒色の背景
41 赤色の背景
42 緑色の背景
43 黄色の背景
44 青色の背景
45 マゼンタの背景
46 シアンの背景
47 白色の背景

パラメータはセミコロンで区切って複数セットすることもできます。

▼(例)1:太文字、7:反転、35:マゼンタのテキスト

GREP_COLOR='1;7;35' grep --color "hoge" piyo.txt

▼(例)1:太文字、4:下線、33:黄色テキスト、46:シアンの背景

GREP_COLOR='1;4;33;46' grep --color "hoge" piyo.txt

自分だけのオリジナルのカラー設定を組み合わせてみるのもおすすめです。

【応用2】grep以外のコマンドもカラーテーマを変えられる

LS_COLORS環境変数を変更することで、lsコマンドを使用した際のファイルの種類や属性の色を定義できます。 カラースキームをカスタマイズするために、以下の行を~/.bashrcファイルに追加します:

※カスタムカラーのパラメータは前述の表を参照

export LS_COLORS='...ここにカスタムカラーを指定...'

例えば、ディレクトリを青色、実行可能ファイルを緑色に変更する場合は、以下のようにLS_COLORSを設定します:

export LS_COLORS='di=34:*.sh=32'

▼上記di、shなどシンボルの意味、ファイルの種類、デフォルト値をまとめた表は以下の通り。

シンボル ファイルの種類 デフォルトの値
di directory 32
ln シンボリックリンク 36
so ソケット 33
pi パイプ 31
ex 実行可能ファイル 35
bd ブロックデバイス 44;37
cd キャラクタデバイス 44;37
su setuid付実行ファイル 37;41
sg setgid付実行ファイル 30;43
tw 書き込み可能ディレクトリstickybit付 30;42
ow 書き込み可能ディレクトリstickybitなし 30;43

ファイルを保存し、source ~/.bashrcを実行するか、ターミナルを再起動すると、lsコマンドを使用した際に更新されたカラースキームが表示されます。

【応用3】lessを使ってカラフルな出力を拡張する

lessコマンドは、ファイルの内容を表示し、対話的にスクロールすることができます。lessを使用する際にカラーハイライトを保持するためには、-Rフラグを使用します。

例えば、piyo.txtというファイルからLinuxという単語を検索しながらファイルを閲覧したい場合は以下の通りです。

grep --color=always "Linux" piyo.txt | less -R

このコマンドは、grep検索でマッチした結果をカラー表示し、lessで出力をスクロールする際にもカラーフォーマットを保持します。 ▲上記イメージでは分かりづらいですが、画面をスクロールしても検索語がハイライト表示されています。

※ここで-Rフラグを使う理由は、 lessコマンドのmanページにも記載されていますが、 「バッファリングされた入力を破棄して、画面を塗り替える。つまり、現在のファイルを再読み込みする。 ファイルが表示中にファイルが変更された場合に便利である」というオプションを利用するためです。

→つまり、平たく言えば「そのまま出力するとカラー設定を色々いじってるからバグった画面が表示されちゃうのをいい感じに表示してやんよ!」ってことです(超訳

▼(参考)-Rオプションを付けない場合のバグったless出力表示。エスケープシーケンスの一部が見えています

まとめ

Linuxコマンドラインに色を加えることで、視覚的に魅力的で効率的な環境を作ることができます。 grepの検索結果をハイライト表示したり、カラーテーマのカスタマイズ、そしてless -Rのようなカラーサポートのあるコマンドを使用することで、鮮やかで個性的なターミナル環境を作りあげることが出来ます。これらのカラー設定を永続化するために、~/.bashrcファイルを変更することを忘れずに、新たなカラフルなLinuxの旅をお楽しみください。

※今回はMX Linux21でカラフルなコマンドラインを試していましたが、 カラーテーマの設定方法は使用しているターミナルエミュレーターや設定によって異なる場合がありますのでご注意ください。