2015-04-05 3 views
-1

я хочу, чтобы выбрать слово, содержащее grp_, но не grp_policy от iam_property.txtвыборе линий на основе регулярных выражений [партии]

, когда я это сделать

set file_iam_property="iam_property.txt" 
findstr /r "^grp_" %file_iam_property% 

возвращает все строки в файле, потому что мое регулярное выражение соответствует всем строкам.

содержание iam_property.txt

grp_testgroup1="grp_testgroup1.json" 
grp_testgroup2="grp_testgroup2.json" 
grp_policy_testpolicy1="grpPolicy_testpolicy1.json" 
grp_policy_testpolicy2="grpPolicy_testpolicy2.json" 

Какие изменения я должен сделать так, чтобы я получить линии с grp_ и не grp_policy, остальная часть строки является переменной, так что я не могу применить регулярное выражение в той части, , например, в grp_testgroup1testgroup1 является переменной.

другими словами, я хочу grp_something быть выбран, но не grp_something_otherthing быть выбран

ответ

2

Это регулярное выражение решить вашу проблему:

findstr /R "^grp_[^_]*=" %file_iam_property% 

То есть, вы хотите не другой _ до следующего =.

+0

да это сработало чудесно, спасибо! –

0

Вы можете попробовать это регулярное выражение,

grp_(?!policy) 

Он использует понятие отрицательного предпросмотра.

Working Demo

+0

sry, но это немного ограниченный подход, поскольку в нем всегда не будет выбираться 'grp_policy', но предположим, что у меня есть другое слово say' grp_access_xyz', тогда мне снова нужно его проверить, я надеялся на решение, которое решает основание числа подчеркивания. –

+0

также я прошу, но это, похоже, не работает в пакетном режиме, хотя он работает в демо, который вы предложили. Я использовал это :: 'findstr/r"^grp _ (?! policy) "% file_iam_property%' –

+0

любые предложения? –