Замена содержимого файла через регулярное выражение - PullRequest
0 голосов
/ 04 марта 2019

Я хотел бы сначала найти имя файла (например, XXX.txt) (которое может быть любым, BBB - просто пример), хранящееся в файле .ps1, и, если оно найдено, заменить его значением, введенным в консоли.затем я обновлю файл, например test.txt, вместо xxx.txt

$DName = read-host -prompt "Please Enter File Name"

(Get-Content "C:\run.ps1") | 
Foreach-Object { $content = $_ -replace "$????","$DName" } | 
Set-Content "C:\run.ps1"

run.ps1 file:

$line = ''
Get-Content C:\bulk\XXX.txt | 
    Select-String -Pattern 'TEMP' |
        ForEach-Object {
        #blah blah
        }

1 Ответ

0 голосов
/ 04 марта 2019

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

$_ -replace "(Get-Content\s+(['`"]?)C:\\bulk\\).*?(\.txt\2)", ('${1}' + $DName.replace('$','$$') + '$3')

См. Демоверсию regex

Подробности

  • (Get-Content\s+(['`"]?)C:\\bulk\\)- Группа 1:
    • Get-Content\s+ - Get-Content, а затем 1+ пробелы
    • (.*?) - Группа 2: ', " или пустая строка
    • C:\\bulk\\ - C:\bulk\ подстрока
  • .*? - 0 или более символов, кроме символов разрыва строки, как можно меньше
  • (\.txt\2) -Группа 2: .txt и текст, захваченный в Группе 2.

Замена является результатом объединения:

  • ${1} - значение группы 1 (фигурные скобкиявляются обязательными, если BBB может фактически начинаться с цифры)
  • $DName.replace('$','$$') - новое имя файла с удвоенными $ символами (поскольку они являются специальными в шаблонах замены .NET)
  • $3 - значение группы 3.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...