Допустим, у меня есть тестовый файл с именем testfile.txt, содержащий строку ниже:Найти и заменить строку, содержащую обе двойные кавычки и скобки
one (two) "three"
Я хочу использовать PowerShell, чтобы сказать, что если вся строка существует поместите линию непосредственно под ним со значением:.
four (five) "six"
(Обратите внимание, что он включает в себя как пробелы, скобки и двойные кавычки Это очень важно, так как проблема, которую я имею, я думаю, вытекания скобки и двойной кавычки).
Так что результат будет:
one (two) "three"
four (five) "six"
Я думал, что самый простой способ сделать это было бы сказать, что если первая строка найдена, замените его самую первую строку снова, и в новая строка, образующая новую строку, включенную в ту же команду. Мне было трудно помещать строки в строку, поэтому я попытался использовать переменную herestring, в которой читается весь текстовый блок с форматированием. Он по-прежнему не разбирает полную строку с кавычками в конвейере. Я новичок в PowerShell, поэтому не сдерживайтесь, если увидите что-то глупое.
$herestring1 = @"
one (two) "three"
"@
$herestring2 = @"
one (two) "three"
four (five) "six"
"@
if((Get-Content testfile.txt) | select-string $herestring1) {
"Match found - replacing string"
(Get-Content testfile.txt) | ForEach-Object { $_ -replace $herestring1,$herestring2 } | Set-Content ./testfile.txt
"Replaced string successfully"
}
else {
"No match found"}
Вышеуказанное только что дает «Ничего не найдено» каждый раз. Это связано с тем, что он не находит первую строку в файле. Я попробовал варианты с использованием backtick [`] и удвоения кавычек, чтобы попытаться сбежать, но я подумал, что точка в строке здесь состоит в том, что она должна анализировать текстовый блок, включая все форматирование, поэтому мне не нужно.
Если изменить файл содержит только:
one two three
, а затем изменить herestring соответственно:
$herestring1 = @"
one two three
"@
$herestring2 = @"
one two three
four five six
"@
Тогда он работает нормально, и я получаю строку заменить, как я хочу.
Большое спасибо за быстрый отклик. – coursemyhorse