Powershell - 搜索和替换 - 第一个匹配的文本字符串出现 - 保存输出文件

12 浏览
0 Comments

Powershell - 搜索和替换 - 第一个匹配的文本字符串出现 - 保存输出文件

我正在尝试仅替换在一堆文本文件中找到的字符串的第一个出现。我花了几个小时在这上面,但似乎无法解决。

我无法让这个工作。[PowerShell脚本以查找和替换具有特定扩展名的所有文件](https://stackoverflow.com/questions/2837785/powershell-script-to-find-and-replace-for-all-files-with-a-specific-extension)

$text_file_ext = 'txt'
Get-ChildItem $base_dir -Recurse -Include "*.$text_file_ext" |
ForEach-Object { (Get-Content $_.FullName) | 
foreach -Begin { $found = $false; $search = 'APPLE' } -Process {
if (! $found -and ($_ -match $search))
{
    $_ = $_ -replace $search, ' COFFEE'
    $found = $true
}
#$_
Set-Content $_.FullName}
}

我还参考了这个:[使用PowerShell对一组文本文件进行查找和替换](http://www.adamtheautomator.com/use-powershell-to-do-a-findreplace-on-a-set-of-text-files/)

示例文本:

Lorem ipsum APPLE dolor sit amet, consectetur adipiscing elit. Donec a pharetra nisl, vitae APPLE vehicula turpis. Aenean eleifend bibendum quam, nec dapibus felis viverra ut. Mauris nec nibh scelerisque, aliquet ligula in, viverra justo. Interdum et malesuada fames ac APPLE ante ipsum primis in faucibus.

非常感谢任何建议。

最终版本工作

$search ="APPLE"
$text_file_ext = 'txt'
Get-ChildItem $base_dir -Recurse -Include "*.$text_file_ext" |
ForEach-Object { (Get-Content $_.FullName -Raw) -replace " (.+?)$search(.+)",'$1COFFEE$2'|
Set-content $_.Fullname
}

0
0 Comments

问题的原因是用户想要使用PowerShell在文件中搜索并替换第一个匹配的文本字符串,并保存输出文件。解决方法是将文件作为单个字符串处理,并使用正则表达式进行懒惰匹配。用户还提到了一些问题,如在替换括号时替换了所有的括号,而不是只替换第一个括号。建议用户在使用搜索字符串之前通过[regex]::Escape()方法进行转义。如果问题仍然存在,用户可以发表另一个问题,包括他们的代码和样本数据。

0