【发布时间】:2015-11-28 14:30:48
【问题描述】:
我有一组要清理的 .csv 文件。每个都有这样的数据:
x0,"","",""
x1,123,456,789
x2,123,456,789
x3,123,456,789
-,"","",""
x4,123,456,789
[space],____,____,____
x5,123,456,789
x6,===,====,======
x7,---,--------=--,-------
我想删除所有不是 xn,###,###,### 的行,所以在这个例子中,它将是第 1、5、7、9 和 10 行。在 cygwin 命令中行,我一一输入以下命令:
sed -i '/"",""/d' *.csv
sed -i '/___/d' *.csv
sed -i '/---/d' *.csv
sed -i '/===/d' *.csv
这些都有效。但是,当我尝试将它们一起放入 perl 脚本时(我的其余代码在 perl 中,它们失败了:
system("sed -i '/"",""/d' *.csv");
system("sed -i '/___/d' *.csv");
system("sed -i '/---/d' *.csv");
system("sed -i '/===/d' *.csv");
我得到了结果:
在 test1.pl 第 1 行的运算符预期位置找到字符串,靠近 ""sed -i '/"",""
(“,”之前缺少运算符?)
在 test1.pl 第 1 行,“”,“/d' *.csv”“附近的运算符预期的位置找到字符串
(“/d' *.csv”之前缺少运算符?)
test1.pl 第 1 行的语法错误,靠近 ""sed -i '/"",""
我注意到除了第一个命令之外的所有工作——sed 中的"" 有什么特别之处吗?任何帮助,将不胜感激!也欢迎使用更简单的解决方案!
【问题讨论】:
-
你不能那样把双引号放在双引号内(第一个命令)。
-
你为什么在 perl 中调用 sed?使用本机 perl 功能执行这些替换会更好。