如何使用部分匹配与通配符替换CSV首个分隔符前的指定文本
解决方案
PowerShell 脚本方案
你的错误原因是正则规则书写错误:之前写的2122-*在正则逻辑里是匹配2122后面跟任意数量的-,不会匹配2122-后面的其他字符,所以只会新增前缀不会替换后续内容。
使用正确的正则规则即可实现需求:
# 替换为你自己的实际文件路径 $inputPath = "E:\path to file\file1.csv" $outputPath = "E:\path to file\output.csv" # 逐行处理,自动保留表头 Get-Content -Path $inputPath -Encoding Default | ForEach-Object { $_ -replace '^2122-[^,]+', '2122-GCE' } | Set-Content -Path $outputPath -Encoding Default
规则说明:^2122-[^,]+中,^匹配行首位置,2122-匹配固定前缀,[^,]+匹配所有非逗号的连续字符,刚好覆盖第一列从2122-开头到第一个逗号前的全部内容。
批处理(.bat)方案
如果偏好使用批处理,可以用以下代码实现,兼容性提示:如果CSV中包含&、!等特殊字符,优先使用PowerShell方案:
@echo off setlocal enabledelayedexpansion :: 替换为你自己的实际文件路径 set "inputFile=E:\path to file\file1.csv" set "outputFile=E:\path to file\output.csv" type nul > "%outputFile%" for /f "usebackq delims=" %%a in ("%inputFile%") do ( set "line=%%a" if "!line:~0,5!"=="2122-" ( for /f "delims=," %%b in ("!line!") do ( set "line=!line:%%b=2122-GCE!" ) ) echo !line! >> "%outputFile%" )
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

