如何从字符串中选择字符串并在powershell中替换它?

时间:2015-06-15 17:24:11

标签: 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}

1 个答案:

答案 0 :(得分: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