grep -xオプション|行全体が一致するものだけを検索する使い方を初心者向けに解説!
生徒
「Linuxでファイルから特定の文字列だけが書かれた行だけを探したいんですが、似たような行までヒットしちゃうんです…」
先生
「それなら、grepコマンドの-xオプションを使えば、行全体が完全に一致した場合だけ結果として表示されますよ。」
生徒
「部分的に一致する行は無視できるってことですね!便利そう!」
先生
「その通り!それではgrep -xの使い方を丁寧に解説していきましょう。」
1. grepコマンドとは?
grep(グレップ)は、Linuxで使われる文字列検索コマンドです。テキストファイルの中から、指定した文字列が含まれる行を見つけるのに使います。
例えば、「banana」という単語が入っている行を探すには次のようにします。
grep banana fruits.txt
しかし、これだと「banana」と「banana juice」や「green banana」など、部分的に一致する行もすべてヒットしてしまいます。
2. -xオプションとは?行全体が一致したときだけヒットする
-xオプションを使うと、1行全体が検索文字列と完全に一致した行だけが表示されます。つまり、余計な単語や前後に余分な文字がある行は無視されます。
以下のようなファイルfruits.txtがあるとします:
cat fruits.txt
apple
banana
banana juice
green banana
banana
この中から「banana」だけの行を探したいときに、通常のgrepを使うと…
grep banana fruits.txt
banana
banana juice
green banana
banana
このように、「banana」を含むすべての行が表示されます。
では-xをつけて検索してみましょう:
grep -x banana fruits.txt
banana
banana
このように、「banana」という文字だけが書かれた行だけを抽出できます。
3. grep -xの使いどころ
以下のような場面でgrep -xは非常に便利です。
- 設定ファイルの中から、完全一致の行だけを探したいとき
- リストやログファイルなどで、正確な一致を確認したいとき
- データ処理で、特定の値だけを持つ行を抽出したいとき
特に、「一致しているかどうかを厳密に判断したい」というときにはgrep -xが最適です。
4. 応用例:複数の完全一致パターンを検索したいとき
たとえば、「apple」と「banana」だけが書かれている行を両方検索したいときは、-E(拡張正規表現)を組み合わせて使えます。
grep -xE 'apple|banana' fruits.txt
apple
banana
banana
このように、appleまたはbananaという行全体が一致した行だけを抽出することができます。
5. grep -xと-wの違いは?
-wオプションも「単語単位での一致」を行うため似ていますが、行全体が一致する必要はありません。
以下のファイルを例に比較してみましょう:
cat sample.txt
apple
green apple
apple juice
apple
-wの場合:
grep -w apple sample.txt
apple
green apple
apple juice
apple
-xの場合:
grep -x apple sample.txt
apple
apple
このように、-xを使うと、「apple」だけの行に限定できるため、より厳密なフィルタリングが可能です。
6. 注意点:空白や改行も一致条件に含まれる
-xは行全体と一致する必要があるため、行の中に余計なスペースや改行コードがあると一致しません。
例えば、以下のようにスペースが含まれているとマッチしません:
echo "banana " | grep -x banana
(出力なし)
見た目では同じに見えても、実際はスペースやタブなどが原因で一致しない場合があるので、注意が必要です。