PowerShell заменяет строку в файле, только если строка НЕ ​​начинается с определенного символа - PullRequest
1 голос
/ 05 октября 2019

У меня есть строка регулярного выражения powershell, чтобы заменить строку в файле конфигурации. Идея состоит в том, чтобы заменить любую строку, содержащую слово «Listen», за которым сразу следует любое число.

(gc  .\path\httpd.conf) -replace  "Listen \d+", "Listen 999"

Как вы можете догадаться, он пытается программно изменить объявление порта в файле конфигурации, заменяя любые существующиеномер с "999".

Проблема в том, что замена происходит, но также влияет на строки, подобные этим:

#Listen 111
 #Listen 222
# Listen 333

Эти закомментированные строки не должны совпадать / заменяться.

Как мне этого добиться?

1 Ответ

4 голосов
/ 05 октября 2019

Вы можете использовать следующий шаблон регулярных выражений:

^[^#]*Listen \d+

Демо

Это будет соответствовать любой строке, которая не содержит комментарийСимвол # в любом месте от начала строки до появления Listen \d+. Ваш обновленный код:

(gc  .\path\httpd.conf) -replace  "^[^#]*Listen \d+", "Listen 999"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...