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
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- findstr- Поиск строк в файлах.
решение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