使用批处理文件在多个csv文件中查找特殊字符

时间:2013-09-09 20:31:55

标签: csv batch-file

我有多个csv文件,我需要搜索特殊字符,如感叹号!如果找到该字符,则删除逗号与.bat文件之间的信息。电子邮件地址似乎总是人们搞砸了。例如:233dd123dde3,有效,拳击手,11月13日,菲利普史密斯,安德鲁!@ myaxxus.net,16666

2 个答案:

答案 0 :(得分:3)

建议sed for Windows

sed -i.bak "s/[^,]*![^,]*//" *.csv

答案 1 :(得分:1)

如果存在单个字符,这似乎是彻底降低整个值的一个极端措施,但它可以完成。

请注意,您必须考虑到第一个值没有前导逗号这一事实,并且最后一个值没有尾随逗号。

此解决方案无法正确处理包含逗号的引用值。

我正在使用hybrid JScript/batch utility called REPL.BAT执行正则表达式搜索并替换stdin并将结果写入stdout。它是纯脚本,适用于从XP开始的任何现代Windows - 无需第三方可执行文件。完整文档嵌入在实用程序中。

假设REPL.BAT位于您当前的目录中,或者更好,位于您的路径中的某个位置:

@echo off
for %%F in (*.csv) do (
  type "%%F" | repl "(^|,)[^,]*![^,]*(,|$)" "$1$2" >"%%F.new"
  move /y "%%F.new" "%%F" >nul
)


修改

现在我看到了Endoro的sed解决方案,我意识到默认的贪婪匹配意味着您不必明确匹配逗号。以下更简单的正则表达式也适用:

@echo off
for %%F in (*.csv) do (
  type "%%F" | repl "[^,]*![^,]*" "" >"%%F.new"
  move /y "%%F.new" "%%F" >nul
)