我有多个 csv 文件,我需要搜索感叹号等特殊字符!如果找到该字符,请使用 .bat 文件删除逗号之间的信息。电子邮件地址似乎总是人们搞砸的地方。例如:233dd123dde3,Valid,boxer,Nov-13,Philip Smith,andrew!@myaxxus.net,16666
问问题
1497 次
2 回答
3
sed -i.bak "s/[^,]*![^,]*//" *.csv
于 2013-09-09T21:18:35.633 回答
1
如果存在单个字符,这似乎是一种彻底删除整个值的极端措施,但可以做到。
请注意,您必须考虑第一个值没有前导逗号,最后一个值没有尾随逗号的事实。
此解决方案将无法正确处理包含逗号的引用值。
我正在使用一个名为 REPL.BAT 的混合 JScript/批处理实用程序,它在标准输入上执行正则表达式搜索和替换,并将结果写入标准输出。它是纯脚本,适用于从 XP 开始的任何现代 Windows - 不需要 3rd 方可执行文件。完整的文档嵌入在实用程序中。
假设 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
)
于 2013-09-09T21:14:01.087 回答