【问题标题】:Powershell - Search & Replace - First Matched Text String Occurance - Save Output FilesPowershell - 搜索和替换 - 第一次匹配文本字符串出现 - 保存输出文件
【发布时间】:2016-03-06 20:49:51
【问题描述】:

我正在尝试仅替换在一堆文本文件中找到的字符串的第一个 出现。我已经为此花费了数小时,但似乎无法修复它。

我无法让它工作。 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}
}

我还引用了这个: 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 在 faucibus 中以 APPLE ante ipsum primis 闻名。

感谢任何建议。

最终版本工作

$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
}

【问题讨论】:

    标签: string powershell search replace


    【解决方案1】:

    如果您可以将文件作为单个字符串处理会更容易。

    如果您有 V3 或更高版本,您可以添加 -Raw 开关:

    (Get-Content $_.FullName -Raw)
    

    对于早期版本,您可以通过 Out-String 管道:

    (Get-Content $_.FullName | Out-String)
    

    然后使用惰性匹配的正则表达式:

    (Get-Content $_.FullName -Raw) -replace "(.+?)$search(.+)",'$1COFFEE$2'|
     Set-content $_.Fullname
    

    【讨论】:

    • Set-Content 将在文件末尾添加额外的换行符。
    • 谢谢先生们的帮助 我已经这样做了: $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 - 我确定我写的方式不对?
    • 您没有得到预期的结果吗?
    • 谢谢你 mjolinor - 它取代了第一次出现,因为它意味着。伟大的工作:)
    • 只是快速跟进 - 如果我想将第一个匹配替换为括号 () - 我已经完成 $search ="()" - 它替换了所有括号 - 我可以用任何方式第一组括号只谢谢你
    猜你喜欢
    • 2014-07-08
    • 2016-11-02
    • 1970-01-01
    • 2016-09-08
    • 2011-09-11
    • 2011-10-10
    • 1970-01-01
    • 2020-04-27
    • 2014-12-02
    相关资源
    最近更新 更多