Przeprowadzanie logicznych porównań LUB z findstr.exe

11

To może być głupie pytanie, ale nawet po przeczytaniu dokumentacji wciąż nie jestem pewien, jak znaleźć wszystkie wiersze w pliku zawierającym „.cpp” lub „.h”.

Czy jest na to sposób?

Na przykład (nie działa):

findstr /i .cpp,.h // , == OR
Thomas Bonini
źródło

Odpowiedzi:

9

Daj temu szansę, powinno działać dla Ciebie.

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

Zawiń zarówno w cudzysłów, jak i oddziel je spacją. Uwaga, musisz także uciec. w obu z nich.

squillman
źródło
4

Jeśli potrzebujesz dołączyć frazy (słowa oddzielone spacją), możesz to zrobić:

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

Lub jeśli otrzymujesz niechciane wiersze, możesz je wykluczyć również za pomocą /vparametru:

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

(Przetestowano to w systemie Windows 7 i Windows 10)

Elysch
źródło
Uwaga: W celu wydajnego przetwarzania dużych zestawów danych zaleca się unikanie drugiego polecenia FindStr, gdy jest to możliwe, lub ograniczenie linii podawanych do niego, gdy nie jest. Jest to możliwe, gdy wykluczone terminy w pewien sposób pokrywają się z warunkami, które mają zostać uwzględnione przy użyciu uproszczonych porównań Regex oferowanych przez polecenie FindStr. W podanym przykładzie dopasowanie „Driver”, ale wykluczenie „DriverS” może być szybsze w przypadku dużych zestawów danych poprzez zmniejszenie liczby linii przekazywanych do drugiego FindStr w celu oceny. tj.FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver[^S]" | FindStr /v /i /c:"Native"
Ben Personick
Ponadto, jeśli znasz dobrze swój konkretny zestaw danych, możesz już wiedzieć, że większość warunków, które chcesz wykluczyć, dotyczy większości swojego zbioru danych, wówczas korzystne może być umieszczenie oświadczeń o wykluczeniu na pierwszym miejscu, tj.FindStr /V /I /C:"Native" /C:"Drivers" | FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver"
Ben Personick
0

Sposób formowania ORlogiki zależy od tego, czego szukasz i przewidywanych przyszłych zmian, jeśli dotyczy.

Jeśli jest to lista zapytań, w których nie ma spacji, możesz to zrobić w następujący sposób, szybko i brudnie:

findstr "thing1 thing2 thing3 thing4 thing5" a jeśli którakolwiek z tych rzeczy będzie obecna, oceni to na true i wyjdzie z 0.

Jeśli to, czego szukasz, ma spacje, musisz użyć findstrdosłownych ciągów wyszukiwania z /c:""typem parametru. Możesz nadal używać tego typu parametru, jeśli nie ma białych znaków.

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

Jednakże , nie można połączyć dosłowne z Szybko i po łebkach . Na przykład to nie zadziała:

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

Musisz przekonwertować wcześniejsze parametry na parametry dosłowne, na przykład:

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

Z tego powodu lepszym rozwiązaniem jest użycie opcji dosłownej, ponieważ lepiej skaluje się ona za pomocą skryptów dynamicznych. Jednak jeśli jest to tylko statyczny zestaw zapytań, które nie mają spacji, wystarczy szybki i brudny sposób.

kayleeFrye_onDeck
źródło