2015-06-15 2 views
1

Я пытаюсь написать экземпляр powershell, который находит и заменяет каждый экземпляр текста и заменяет его.Как выбрать строку из строки и заменить ее в powershell?

UserRights "rights_wo_view" 

Мне нужно разместить круглые скобки вокруг кавычек. Я пробовал все виды вещей, но я бегу.

$files = get-item C:\Users\programmer\Documents\Project\tsbrick\*.asp 
foreach ($file in $files) 
{(Get-Content $file) 
select-string -pattern ('UserRights') 
ForEach-Object { 
$_ -replace '"r','("r' 
$_ -replace '"p','("p' 
$_ -replace '"','");' 

} | Out-File $file} 

ответ

2

Не лучшее регулярное выражение, но это было бы хорошим началом. Вы не знаете, как выглядит строка, поэтому я предполагаю, что она находится в отдельной строке с переменными пробелами и/или текстом.

Get-ChildItem C:\temp\*.asp | ForEach-Object{ 
    $file = $_.FullName 
    (Get-Content $file) -replace '(.*UserRights\s*)"(.*?)"(.*)','$1("$2")$3' | Set-Content $file 
} 

Использование регулярных выражений запроса уменьшает необходимость замены сцепления этой и Set-Content считается льготным над Out-File. -replace функционирует как оператор массива, поэтому нам не нужно использовать select-string для этого, поскольку вы все равно хотите сохранить остальную часть содержимого файлов. Это будет искать линию с «UserRights», а затем некоторое содержимое внутри кавычек. Захватите эти части и запишите их обратно в файл с добавленными скобками.

На практике файл со следующей строкой:

o consequat. UserRights "rights_wo_view" Duis aute irure dolor in reprehenderi 

должен стать этим, оставляя остальную часть файла нетронутым.

o consequat. UserRights ("rights_wo_view") Duis aute irure dolor in reprehenderi 
+0

Спасибо, французский (?) Является своего рода запутанным меня, хотя ха-ха –

+0

@MicahLongmire Это [Lorem Ipsum] (http://www.lipsum.com/) ... латынь. Я использовал его для моделирования содержания – Matt

+0

ха-ха, показывает, насколько я невежественен. –

Смежные вопросы