Регулярное выражение Powershell заменяет строку, содержащую ТОЛЬКО определенные символы - PullRequest
0 голосов
/ 28 февраля 2019

Я читаю файл с get-content -raw из-за других операций, которые я выполняю.

$c = get-content myfile.txt -raw

Я хочу заменить всю строку, содержащую ТОЛЬКО символы "*" или "=", на "заяц"

Я пытаюсь

$c -replace "^[*=]*$","hare"

но это не удается.Он работает с простым вводом строки, но не с моей строкой, содержащей CRLF.(Другие операции замены регулярных выражений, не включающие классы символов, работают нормально.)

TEST: задан входной файл из двух строк

*=** 
keep this line ***
***=

Вывод должен быть

hare
keep this line ***
hare

Перепробовал много вещей, не повезло.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вы должны использовать опцию (?m) (RegexOptions.Multiline), чтобы ^ соответствовал началу строки и $ концу строки.

Однако есть предостережение:привязка $ в регулярном выражении .NET с многострочным параметром соответствует только перед новой строкой, LF, "`n", char.Перед $ необходимо убедиться, что необязательный (или если он всегда есть, обязательный) символ CR.

Вы можете использовать

$file -replace "(?m)^[*=]*\r?$", "hare"

Тестовая демонстрация Powershell:

PS> $file = "*=**`r`nkeep this line ***`r`n***=`r`n***==Keep this line as is"
PS> $file -replace "(?m)^[*=]*\r?$", "hare"
hare
keep this line ***
hare
***==Keep this line as is
0 голосов
/ 28 февраля 2019

Попробуйте это:

$c = get-content "myfile.txt" -raw
$c -split [environment]::NewLine | % { if( $_ -match "^[*= ]+$" ) { "hare" } else { $_ } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...