findstr: [^ обратный класс] некорректное поведение

#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.