findstr.exeで論理OR比較を行う


回答:


8

これを試してみてください。うまくいくはずです。

findstr /i "\.cpp \.h" myfile.txt

両方を引用符で囲み、スペースで区切ります。また、エスケープする必要があります。それらの両方で。


4

フレーズ(スペースで区切られた単語)を含める必要がある場合は、次のようにできます。

findstr /i /c:"IBSS" /c:"WDI Version" /c:"Soft Ap"

または、不要な行を取得している場合は、/vパラメータを使用してそれらを除外することもできます。

findstr /i /c:Hosted /c:Version /c:Driver | findstr /v /i /c:drivers /c:native

(Windows 7およびWindows 10でテスト済み)


大規模なデータセットを効率的に処理するために、可能な場合は2番目のFindStrコマンドを回避するか、そうでない場合はフィードされる行を減らすことが好ましい。これは、FindStrコマンドによって提供される簡略化された正規表現比較を使用して除外される用語が含まれる用語と何らかの方法で重複する場合に可能です。「Driver」に一致するが「DriverS」を除外する例では、評価する2番目のFindStrに渡される行を減らすことにより、大規模なデータセットでより高速になる可能性があります。ieFindStr /I /R /C:"Hosted" /C:"Version /C:"Driver[^S]" | FindStr /v /i /c:"Native"
Ben Personick

あなたは十分にあなたの特定のデータセットを知っていればまた、あなたはすでにあなたのデータセットの大多数のアカウントを除外したい用語のほとんどは、それが最初のすなわち除外ステートメントを配置することが有益であることを知っているかもしれませんFindStr /V /I /C:"Native" /C:"Drivers" | FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver"
ベンPersonick

0

ORロジックをどのように形成するかは、探しているものと、該当する場合は予想される将来の変更によって異なります。

空白が含まれていないクエリのリストの場合は、次のようにすばやく簡単に実行できます。

findstr "thing1 thing2 thing3 thing4 thing5" そして、それらのいずれかが存在する場合は、trueと評価され、0で終了します。

あなたが探しているものが空白を持っているなら、あなたはパラメータfindstr/c:""タイプでリテラル検索文字列を使わなければなりません。空白がない場合でも、このタイプのパラメーターを使用できます。

/C:string Uses specified string as a literal search string.

ただしリテラルとクイック&ダーティーを組み合わせることはできません。たとえば、これは動作しません:

findstr "thing1 thing2" /c:"thing3 thingy"

次のように、以前のパラメーターをリテラルパラメーターに変換する必要があります。

findstr /c:"thing1" /c:"thing2" /c:"thing3 thingy"

このため、動的スクリプトでより適切にスケーリングできるため、リテラルオプションを使用することをお勧めします。ただし、それが空白のない静的なクエリのセットである場合は、すばやく簡単な方法で十分です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.