PowerShell:移除含PCARTE行的前13个字符并保存处理结果
处理文本文件:移除指定行的前13个字符并保存结果
我需要处理一个文本文件,要求移除所有包含字符串PCARTE的行的前13个字符,同时保留其他行不变,最终将处理后的内容写入文件。
原始文件内容
PCARTE 14/04 PAYMENTS D17/04/2023 T-7.90 PCARTE 14/04 PAYMENTS D17/04/2023 T-7.13 PCARTE 14/04 PAYMENTS D17/04/2023 T-42.63 PCARTE 15/04 Pahe D15/04/2023 T-121.89 PCARTE 14/04 NY D15/04/2023 T-11.75 PCARTE 14/04 CHE*
期望处理结果
PAYMENTS D17/04/2023 T-7.90 PAYMENTS D17/04/2023 T-7.13 PAYMENTS D17/04/2023 T-42.63 Pahe D15/04/2023 T-121.89 NY D15/04/2023 T-11.75 CHE*
原脚本的问题
你找到的脚本存在两个关键问题:
- 匹配逻辑不准确:
-like使用的通配符表达式"PCARTE *"只能匹配以PCARTE(带空格)开头的行,无法覆盖所有包含PCARTE的目标行; - 未处理结果存储与写入:脚本仅对符合条件的行做了移除操作,但没有将处理后的行(包括未修改的行)收集起来,也没有写入到文件中。
修正后的完整脚本
以下是可直接运行的脚本,完成读取、处理、写入全流程:
# 指定文件路径 $filePath = "C:\Users\TEST\Downloads\TEST.txt" # 读取原始文件内容 $fileContent = Get-Content $filePath # 初始化数组存储处理后的内容 $processedLines = @() foreach ($line in $fileContent) { # 判断当前行是否以PCARTE开头(精准匹配目标行) if ($line -match '^PCARTE') { # 移除前13个字符 $processedLine = $line.Remove(0, 13) } else { # 非目标行直接保留 $processedLine = $line } # 将处理后的行加入结果数组 $processedLines += $processedLine } # 将结果写入文件(可选择覆盖原文件,或指定新路径) Set-Content -Path $filePath -Value $processedLines # 若不想覆盖原文件,可指定新路径: # Set-Content -Path "C:\Users\TEST\Downloads\TEST_processed.txt" -Value $processedLines
更简洁的管道写法
如果想简化代码,可直接用管道结合正则替换一步完成:
$filePath = "C:\Users\TEST\Downloads\TEST.txt" # 读取文件后逐行处理:匹配以PCARTE开头的行,移除前13个字符 (Get-Content $filePath) | ForEach-Object { if ($_ -match '^PCARTE') { $_ -replace '^.{13}', '' } else { $_ } } | Set-Content -Path $filePath
解释:^.{13}是正则表达式,匹配行开头的任意13个字符,替换为空即可实现移除前13个字符的效果。
内容的提问来源于stack exchange,提问作者staxxoverflow
相关产品推荐
相关产品推荐

