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