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
-r
grep
find . ! -path './=' -type f -exec grep -n SearchTextHere /dev/null {} +
(追加の/dev/null
保証は、ファイルが1つしか見つからないgrep
場合でも常にファイル名を印刷します。GNUではこのオプションを使用することもできます。)find
grep
-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」を使用しようとしています。それが何のためのものかわかりません。