Робити логічне АБО порівняння з findstr.exe


11

Це може бути дурним питанням, але навіть після прочитання документації я все ще не впевнений, як знайти всі рядки у файлі, що містять або ".cpp", або ".h".

Чи є спосіб це зробити?

Наприклад (не працює):

findstr /i .cpp,.h // , == OR

Відповіді:


9

Дайте це постріл, має працювати для вас.

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)


Примітка. Для ефективної обробки великих наборів даних бажано уникати другої команди FindStr, коли це можливо, або зменшити рядки, що подаються до неї, коли ні. Це можливо, коли терміни, які потрібно виключити, перекриваються певним чином із термінами, які слід включити, використовуючи спрощені порівняння Regex, запропоновані командою FindStr. У наведеному прикладі відповідність "Драйвер", але виключаючи "Драйвери", має велику швидкість на великих наборах даних за рахунок зменшення рядків, переданих до другого FindStr для оцінки. тобтоFindStr /I /R /C:"Hosted" /C:"Version /C:"Driver[^S]" | FindStr /v /i /c:"Native"
Бен

Крім того, якщо ви досить добре знаєте свій конкретний набір даних, ви, можливо, вже знаєте, що більшість термінів ви хочете виключити з облікового запису для більшості вашого набору даних, тоді вигідно буде розмістити спочатку заяви про виключення, тобтоFindStr /V /I /C:"Native" /C:"Drivers" | FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver"
Бен

0

Те, як ви формуєте ORлогіку, залежить від того, що ви шукаєте, і від ваших очікуваних майбутніх змін, якщо це застосовується.

Якщо це список запитів, у яких немає пробілу, ви можете просто зробити це так, швидко та брудно:

findstr "thing1 thing2 thing3 thing4 thing5" і якщо будь-яка з цих речей присутня, вона буде оцінена як істина та вихід 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"

Через це кращою практикою є використання буквеного варіанту, оскільки він краще масштабуватиметься з динамічними сценаріями. Однак якщо це просто статичний набір запитів, що не мають простору пробілів, швидкого та брудного способу має бути достатньо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.