findstr: [^ обратный класс] некорректное поведение - PullRequest
0 голосов
/ 04 апреля 2019

Я не хочу, чтобы findstr отображал строку, содержащую 'btq' между - и -

Например: ghjgvyu-btq-jklli8j

Итак, я попробовал эту команду:

echo ghjgvyu-btq-jklli8j|findstr .*-[^btq]-.*

Не работает вообще ... Ничего не отображается с или без ^

Тогда я попытался:

echo ghjgvyu-btq-jklli8j|findstr "[^btq]"

Делает обратное: всегда отображаетстрока независимо от того, используется ли ^.

Она работает правильно только когда я повторяю btq и ничего больше:

echo btq|findstr "[^btq]"

Но это не то, что я хочу.

1 Ответ

0 голосов
/ 05 апреля 2019

Мое решение было бы запустить 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, которая не должна появляться в выводе, там не встречается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...