我需要閱讀 10K 檔案,逐行搜索檔案,以查找 word 后面的字串SUFFIX。捕獲該字串后,我需要從檔案中洗掉它的所有痕跡,然后重新保存檔案。
使用下面的示例 - 我會捕獲-4541. -4541然后我會用 NULL替換所有出現的。一旦我替換了所有出現的內容,我就會保存更改。
這是我的資料:
ABSDOMN VER 1 D SUFFIX -4541
05 ST-CTY-CDE-FMHA-4541
10 ST-CDE-FMHA-4541 9(2)
10 CTY-CDE-FMHA-4541 9(3)
05 NME-CTY-4541 X(20)
05 LST-UPDTE-DTE-4541 9(06)
05 FILLER X
這是一個啟動腳本。我可以顯示包含單詞 SUFFIX 的行,但我無法捕獲它后面的字串。在這種情況下-4541。
$CBLFileList = Get-ChildItem -Path "C:\IDMS" -File -Recurse
$regex = "\bSUFFIX\b"
$treat = $false
ForEach($CBLFile in $CBLFileList) {
Write-Host "Processing .... $CBLFile" -foregroundcolor green
Get-content -Path $CBLFile.FullName |
ForEach-Object {
if ($_ -match $regex) {
Write-Host "Found Match - $_" -foregroundcolor green
$treat=$true
}
}
uj5u.com熱心網友回復:
嘗試以下操作:
- 注意:請務必先備份輸入檔案,因為它們將被更新到位。使用
-EncodingwithSet-Content指定所需的編碼,如果它應該不同于Set-Content's 默認值。
$CBLFileList = Get-ChildItem -LiteralPath "C:\IDMS" -File -Recurse
$regex = '(?<=SUFFIX) -\d '
ForEach ($CBLFile in $CBLFileList) {
$firstLine, $remainingLines = $CBLFile | Get-Content
if ($firstLine -cmatch $regex) {
$toRemove = $Matches[0].Trim()
& { $firstLine -creplace $regex; $remainingLines -creplace $toRemove } |
Set-Content -LiteralPath $CBLFile.FullName
}
}
根據您的反饋,最終為您作業的正則運算式是(?<=SUFFIX).*$(在這種情況下可以簡化為(?<=SUFFIX). ),即捕獲substring后面的任何內容SUFFIX,而不是僅捕獲后跟 a-和一個或多個數字 ( \d )的空格.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/437256.html
