#findstr
#findstr
Вопрос:
Я не хочу, чтобы findstr отображал строку, содержащую ‘btq’ между — и —
Например: ghjgvyu-btq-jklli8j
Итак, я попробовал эту команду:
echo ghjgvyu-btq-jklli8j|findstr .*-[^btq]-.*
Не работает вообще… Не отображает ничего с или без ^
Затем я попытался:
echo ghjgvyu-btq-jklli8j|findstr "[^btq]"
Делает обратное: он всегда отображает строку независимо от того, используется ли ^.
Он работает корректно только тогда, когда я повторяю btq и ничего больше:
echo btq|findstr "[^btq]"
Но это не то, чего я хочу.
Ответ №1:
Моим решением было бы запустить findstr
с /V
, /C
и /R
параметром:
findstr /V /R /C:"-btq-"
/R
это параметр, который позволяет выполнять поиск с помощью регулярного выражения. С помощью параметра /C
вы указываете конкретную строку / регулярное выражение, которое вы ищете в строке, и с помощью /V
вы ищете строки, которые не содержат соответствия, указанного в параметре /C
.
Так, например:
@echo off
echo 1 ghjgvyu-btq-jklli8j | findstr /V /R /C:"-btq-"
echo 2 ghjgvyu-bt-jklli8j | findstr /V /R /C:"-btq-"
echo 3 ghjgvyu-b-jklli8j | findstr /V /R /C:"-btq-"
echo 4 ghjgvyu-avc-jklli8j | findstr /V /R /C:"-btq-"
echo 5 abc | findstr /V /R /C:"-btq-"
дает мне
2 ghjgvyu-bt-jklli8j
3 ghjgvyu-b-jklli8j
4 ghjgvyu-avc-jklli8j
5 abc
Видите ли, строка ghjgvyu-btq-jklli8j
, которая не должна встречаться в выходных данных, там не встречается.
Комментарии:
1. Спасибо за вашу помощь. Проблема в том, что /V нельзя использовать для поиска внутри файла с другими строками, если вы все еще хотите, чтобы findstr находил определенную строку. Я должен был упомянуть об этом в своем стартовом сообщении. У меня есть файл, подобный этому: jjhjg kjljlkl lkjkjjjjjjjj ghjgvyu-btq-jklli8j cv ghjgvyu-cfg-jklli8j kjjjjjio ghjgvyu-avc-jklli8j Теперь я хочу, чтобы findstr отображал только все строки, которые содержат ghjgvyu * jklli8j, но не отображал те, которые содержат -btq- (ghjgvyu-btq-jklli8j) Это можно сделать с помощью перехода к другой команде findstr, которая предпочла бы 1 команду findstr.