【发布时间】:2021-04-16 17:20:48
【问题描述】:
我有一个脚本似乎可以正常运行,但它运行良好。 我的文件包含多行字符串“PROCEDURE DIVISION.”,句号在末尾。
我需要做什么......
仅删除字符串“PROCEDURE DIVISION”的第 [2 次出现]。如果它在文本文件中两次,如果只找到一次则绕过文件。我需要保留第一次出现并更改/删除第二次出现。
我可以轻松找到并替换所有匹配项,我不知道如何只替换 2 个中的 1 个。
这可以使用 Powershell 吗?
到目前为止,这是我的代码...
Get-ChildItem 'C:\Temp\*.cbl' -Recurse | ForEach {#
(Get-Content $_ | ForEach { $_ -replace "PROCEDURE DIVISION\.", " "}) | Set-Content $_
}
更新
我得到了这个工作,它并不漂亮。
唯一的问题是捕获 cmets 部分中的字符串。 我需要做的只是当字符串从每行的第 8 位开始时才算作命中。
这可能吗?
Get-ChildItem 'C:\Thrivent\COBOL_For_EvolveWare\COBOL\COBOL\*.*' -Recurse | ForEach {
($cnt=(Get-Content $_ | select-string -pattern "PROCEDURE DIVISION").length)
if ($cnt -gt "1") {
(Get-Content $_ | ForEach { $_ -replace "PROCEDURE DIVISION\.", " "}) | Set-Content $_
$FileName = $_.FullName
Write-Host "$FileName = $cnt" -foregroundcolor green
}
【问题讨论】:
-
你好安德鲁!这是一个很棒的帖子,但它并没有解决我的问题。在阅读了另一篇文章后,我现在意识到我应该非常具体。我需要删除第二次出现的字符串并留下第一个。那可能吗?问候,-罗恩
标签: powershell replace find