Многострочный аргумент команды DOS findstr

Многострочный аргумент команды DOS findstr
findstr /v "black"  File1.txt

Приведенная выше команда DOS отобразит содержимое файла «File1.txt», которое не соответствует строке «black».

Как изменить эту команду, если мне нужно отфильтровать слова «черный» и «белый»?

решение1

Как отфильтровать слова «черный» и «белый»?

Следующая команда отобразит все строки, содержащие"black" НИ "white":

findstr /v "black white" blackwhite.txt

Следующая команда отобразит все строки, содержащие"black" ИЛИ "white":

findstr "black white" blackwhite.txt

Следующая команда отобразит все строки, содержащиеТОЧНО "black white":

findstr /c:"black white" blackwhite.txt

Следующая команда отобразит все строки, содержащие"black" И "white":

findstr "white" blackwhite.txt | findstr "black"

Примечания:

  • Если строка поиска содержит несколько слов, разделенных пробелами, findstrбудут возвращены строки, содержащие любое из этих слов (ИЛИ).

  • Буквальный поиск ( /C:string) изменит это поведение и позволит искать фразу или предложение. Буквальный поиск также позволяет искать знаки препинания.

Пример файла данных (blackwhite.txt):

red
black
white
blue
black white
black and white

Пример вывода:

F:\test>findstr /v "black white" blackwhite.txt

red
blue

F:\test>findstr "black white" blackwhite.txt
black
white
black white
black and white

F:\test>findstr /c:"black white" blackwhite.txt
black white

F:\test>findstr "white" blackwhite.txt | findstr "black"
black white
black and white

Дальнейшее чтение

решение2

Если вам нужно отобразить все строки со словами «черный» или «белый», то избавьтесь от /v в вашей команде.

Попробуйте: findstr white File1.txt или findstr black File1.txt или findstr "black white" File1.txt

Операнд /V выведет все строки, НЕ содержащие искомую строку.

Введите findstr /? для получения дополнительной информации об использовании findstr.

решение3

Хотел бы добавить, что стоит упомянуть, как использовать findstr со stdout в Windows для множественного поиска.

Вот как вывести список только имен сетевых интерфейсов и их IP-адресов:

ipconfig /all | findstr /i /L /c:"Ethernet" /c:"IPv4"

Документация Microsoftдетали каждого параметра

  • /iИгнорирует регистр символов при поиске строки.
  • /lОбрабатывает строки поиска буквально.
  • /c:<string> Использует указанный текст как буквальную строку поиска.

решение4

Вот еще один пример использования другого метода вывода, а не просто прямого поиска файлов. Например, проверьте статус сетевого порта, где port = 98765и status = ESTABLISHED or LISTENING.

Например, это запускает netstat каждые пять секунд, затем передает вывод netstat в FIND (можно также использовать FINDSTR), затем передает эти результаты в findstr для фильтрации, когда порт находится в определенном состоянии (в данном случае ESTABLISHED or LISTENING).

netstat -an 5 | find "98765" | findstr "ESTABLISHED LISTENING"

TCP    192.168.123.456:57349     10.10.12.34:98765 ESTABLISHED

Связанный контент