#powershell
#powershell
Вопрос:
У меня есть файл test.properties, который имеет следующий формат:
hostName=hostName1
#hostName=hostName2
portNum=portNum1
#portNum=portNum2
Я пытаюсь написать сценарий powershell, который при запуске будет комментировать любые имена хостов и номера портов и раскомментирует только тот новый, который я хочу передать.
Если бы у меня была переменная, которая была $hostNameToUncomment, тогда я бы хотел, чтобы поток говорил что-то вроде:
$hostNameToUncomment=hostName1
$propertiesFile = Get-Content ($path) | ForEach-Object {
if hostName anywhere is uncommented, comment it
if hostName value = $hostNameToUncomment,
Remove the '#' from that line
}
Как это можно сделать?
Комментарии:
1. Почему бы не настроить хэш-таблицу с именем хоста в качестве ключа и номером порта в качестве значения. Тогда вы можете просто передать имя хоста и использовать его для ссылки на порт #?
Ответ №1:
Вы можете использовать a switch
для чтения файла и воспользоваться его -Regex
переключателем:
$toUncomment = 'hostname2'
$file = 'path/to/file.txt'
$result = switch -Regex -File($file)
{
"^#hostname=$toUncommentb"
{
$Matches[0] -replace '^#'
}
"^[^#]w =(?!$toUncomment).*"
{
$Matches[0] -replace '^','#'
}
Default
{
$_
}
}
$result | Out-File $file
См . https://regex101.com/r/sfhWz4/2 для объяснения обоих регулярных выражений используйте hostname2 в качестве примера.
Комментарии:
1. Это сработало отлично! Спасибо!
2. @BennyB рад помочь