Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

【Linux】grepで「-(ハイフン)」から始まる文字を検索する方法と注意点

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

Linuxのターミナルでログやテキストファイルを調査しているとき、「ハイフン(-)から始まる文字列」を検索したくなることがありますよね。

例えば、grep "-E" hoge.txt のように実行すると……実は正しく検索できず、エラーになってしまいます。

今回は、なぜこれがエラーになるのか、そして正しく検索するための2つの解決策をサクッと解説します!

なぜ普通に検索できないのか?

grep コマンドにおいて、ハイフン(-)は 「ここから先はオプション(-i-v など)ですよ」 という意味を持つ特別な文字です。

そのため、普通に grep "-E" hoge.txt と書いてしまうと、grep は「-E という検索文字」ではなく「拡張正規表現を使うための -E オプション」が指定されたと勘違いしてしまいます。結果として、検索文字列が指定されていない扱いになり、エラーや予期せぬ挙動を起こしてしまうのです。

これを回避するには、「これはオプションではなく、ただの文字列だよ」と grep に教えてあげる必要があります。

解決策1:バックスラッシュ(\)でエスケープする

最も直感的で簡単なのが、ハイフンの直前にバックスラッシュ(環境によっては円マーク \)を置いて、文字としての意味を打ち消す(エスケープする)方法です。

コマンド例

Bash

grep "\-E" hoge.txt

このように \- と書くことで、grep に「オプションではなく、文字通りのハイフン」として認識させることができます。

解決策2:【おすすめ】「–」オプションを使用する

もう一つの(そしてより安全な)方法が、--(ダブルハイフン)を挟む方法です。

grep を含む多くのLinuxコマンドでは、「-- が来たら、それ以降の引数はすべてオプションではなく引数(検索文字列やファイル名)として扱う」という共通ルールがあります。

コマンド例

Bash

grep -- "-E" hoge.txt

これならハイフン自体をエスケープする必要がないため、複数のハイフンが含まれる複雑な文字列を検索したいときにも見やすくておすすめです。

まとめ

  • ハイフンで始まる文字をそのまま grep すると、オプションと誤認されてエラーになる。

  • 対策は "\-E" とエスケープする か、-- "-E" と区切りを入れる

ちょっとした仕様ですが、知っておくとコンソールでの作業がスムーズになります。ぜひ試してみてください!

タイトルとURLをコピーしました