Ipad

grepで単語を除外する方法

grepで単語を除外する方法

macOSのターミナル

grep コマンドラインツールは、テキストデータから、定義された文字列、文字、単語、または正規表現に一致する行やスニペットを検索するのが非常に便利です。grep の用途のほとんどは、構文の一致に基づいてデータをソートすることですが、grepで特定の単語や文字列を除外したい場合はどうすればよいでしょうか? grep で行の一致を除外することは、grep で一致を検索して出力するのと同じくらい便利です。そこで、grep で文字列の一致を除外する方法と単語の一致を除外する方法を説明しましょう。


もちろん、このツールを便利に使うには、コマンドラインの使用経験とgrepの使い慣れが必要です。もし、このチュートリアルを実際に試してみたい場合は、ターミナルアプリケーションを開いてご自身で試してみてください。grepはOSに依存しないユーティリティなので、Mac OS、Linux、Unixなど、grepが使えるOSであればどこでも、excludeコマンドを使用できます。

grepで特定の単語を除外する方法

文字列または構文が一致する行を除外する最も簡単な方法は、grep と -v フラグを使用することです。

たとえば、cat を使用してコマンドラインでファイルを印刷しているが、「ThisWord」という用語を含むすべての行を除外したい場合、構文は次のようになります。

cat example.txt | grep -v "ThisWord"

出力は example.txt テキスト ファイルになりますが、「ThisWord」と一致する文字列を含む行は除外されます。

次のように、ファイルに対して直接 grep を使用し、単語または構文に基づいて行の一致を除外することもできます。

grep -v "ThisWord" example.txt

特定のワークフローに最適なものを使用してください。

grepで複数の文字列または単語を除外する方法

単一の単語に一致するものを除外する方法がわかったので、次に当然の疑問は、grepを使って複数の単語を除外する方法です。これも同様に簡単で、-vフラグと-eフラグを使っていくつかの方法があります。

まず、grep にパイプされたファイルに対して cat を使用し、「Word1」と「Word2」の 2 つの単語に一致する行を除外する上記の例を見てみましょう。これは次のようになります。

cat example.txt | grep -v -e "Word1" -e "Word2"

「Word1」または「Word2」を含む行は印刷結果から除外されます。

これまでと同様に、ファイルに対して grep を直接使用することもできます。

grep -v -e "Word1" -e "Word2" example.txt

もう 1 つの方法は、次のようにパイプを使用して各一致を区切り、grep で除外する内容を分離することです。

grep -Ev "word1|word2" example.txt

サンプル テキスト ファイルでこれらのオプションのいずれかをテストすると、どのアプローチを採用しても出力は同じであり、対象となるフレーズ、構文、単語、またはテキスト一致を含む行がそれぞれ除外されることがわかります。

素晴らしい。grep を使用してデータを除外する便利な例を教えてください。

上級の Mac ユーザーにとって役立つ実用的な例として、コマンド ライン履歴を印刷および照会するときに grep 除外を使用して、以前に実行したコマンドを検索し、デフォルトの一致を検索しますが、選択した一部のデフォルト文字列を出力から除外することができます。

この例では、デフォルトの文字列に一致するコマンド履歴を出力しますが、「com.apple.itunes」で定義されている iTunes に関連する一致は除外します。

history |grep "defaults write" |grep -v -e "com.apple.itunes"

ここまで読んでいただいている方なら、これは「defaults write」コマンドの実行履歴をすべて報告しますが、iTunesアプリケーションに関連するものは除外されます。いいですね?

grep で一致を除外する特に便利な使い方があれば、ぜひ下のコメント欄で教えてください!この記事が気に入ったら、ぜひこちらのコマンドライン関連記事もご覧ください。きっと、もっとたくさんの情報が見つかるはずです!