個々のファイルを無視してディレクトリから繰り返し検索するには、grep を使用します。

個々のファイルを無視してディレクトリから繰り返し検索するには、grep を使用します。

grepはディレクトリ全体を検索しますが、1つのファイル内の一致を無視する方法はありますか?

私が使用するコマンドは次のとおりです。

grep -rn 'SearchTextHere'

無視する必要があるファイルのファイル名が=

はい、ファイル名は単に等号です。うん、私も理解できません。

(そこにあるべきかどうかわからないので、直接削除することはできません。誤ってファイルのgrepパイピングやそれと似ていないようです)。

グレブバージョン3.4

答え1

=次のような場合に発生する可能性があります。 - 名前付きファイル:

[ a >= b ]

または:

expr a >= b

間違っています。なぜなら、これは本質的に同じであるからです。

[ a b ] > '='
expr a b > '='

つまり、これらまたは[コマンドexprを実行して出力をにリダイレクトします=>これはシェル構文のリダイレクト演算子であるため、引用する必要が>あります。

expr a '>=' b
[ a '>=' b ]

(演算子の組み込み機能を[サポートする実装はほとんどありませんが>=;)yash[

=ファイルが空の場合、これは可能な説明の1つです。

=GNUの再帰検索から呼び出されたすべてのファイルを除外するには、grep次のようになります。

grep -rn --exclude== SearchTextHere .

または:

grep -rn --exclude = SearchTextHere .

--exclude-fromファイルの除外リストを提供したい場合に便利です。ここでは、次のようにすることができます。

echo = | grep --exclude-from=/dev/stdin -rn SearchTextHere .

を使用するよりもこれが良いです--exclude

とにかく、現在のディレクトリにあるファイルだけを除外するようにGNUに指示する方法はありませんgrep -r(そして他のサブディレクトリにあるファイルは引き続き検索されます)。これを行うには、ファイルの検索と除外を使用してファイル内のテキストを検索するように呼び出すことができます。これは標準オプションではありません。==find=grep-rgrep

find . ! -path './=' -type f -exec grep -n SearchTextHere /dev/null {} +

(追加の/dev/null保証は、ファイルが1つしか見つからないgrep場合でも常にファイル名を印刷します。GNUではこのオプションを使用することもできます。)findgrep-H

またはスキップ目次通貨=とその中のすべてのファイル(これはgrep --exclude =機能しません):

find . -name = -prune -o -type f -exec grep -rn /dev/null {} +

(ここでスキップしてください。どのファイル/ディレクトリ名は、現在のディレクトリのディレクトリのみをスキップする=ためのものです。-path ./==

答え2

Steeldriverのコメント提案がうまくいくようです。

grep -rn 'SearchTextHere' --exclude==

または、一般的なファイル名は次のとおりです。

grep -rn 'SearchTextHere' --exclude=FileToIgnore

マニュアルページで「--exclude-from」を使用しようとしています。それが何のためのものかわかりません。

関連情報