我有一套10个CSV文件,通常有这种替换csv文件中的一行?
a,b,c,d
d,e,f,g
现在的一个条目,由于在该文件中的一些错误条目已成为这种现在
a,b,c,d
d,e,f,g
,,,
h,i,j,k
我想要删除所有文件中只有逗号的行。这些文件位于Linux文件系统上。
您推荐的任何命令都可以替换所有文件中的错误行。
我有一套10个CSV文件,通常有这种替换csv文件中的一行?
a,b,c,d
d,e,f,g
现在的一个条目,由于在该文件中的一些错误条目已成为这种现在
a,b,c,d
d,e,f,g
,,,
h,i,j,k
我想要删除所有文件中只有逗号的行。这些文件位于Linux文件系统上。
您推荐的任何命令都可以替换所有文件中的错误行。
这取决于你的意思是替换。如果你的意思是“删除”,然后在@ wnoise的解决方案一个简单的变体是:
grep -v '^,,,$' old-file.csv > new-file.csv
注意,这个只删除那些恰好三个逗号线。如果你想与任意数量的逗号(包括零)的删除恶意形成的线 - 和线路上无其他字符,则:
grep -v '^,*$' ...
还有一些对将处理其他情况下,正则表达式无尽的其他变化。用引号内的逗号处理完整的CSV数据开始需要除正则表达式之外的东西。它可以在广泛的范围内完成,特别是在更复杂的正则表达式系统(如PCRE或Perl)中。但它需要更多的工作。
sed 's/,,,/replacement/' < old-file.csv > new-file.csv
任选随后 MV新FILE.CSV老FILE.CSV
替换或删除,您的文章是不明确......对于更换看到wnoise的答案。对于删除,你可以使用
awk '$0 !~ /,,,/ {print}' <old-file.csv > new-file.csv
你想用某些东西替换它们,还是完全删除它们?无论哪种方式,都可以使用sed
来完成。删除:
sed -i -e '/^,\+$/ D' yourfile1.csv yourfile2.csv ...
要更换:好,看到wnoise的答案,或者如果你不希望创建与输出的新文件,
sed -i -e '/^,\+$/ s//replacement/' yourfile1.csv yourfile2.csv ...
或
sed -i -e '/^,\+$/ c\
replacement' yourfile1.csv yourfile2.csv ...
(应完全按照原样输入,包括换行符)。当然,你也可以用awk
或perl
做到这一点,或者,如果你只是删除线,甚至grep
:
egrep -v '^,+$' <oldfile.csv> newfile.csv
我测试了这些,以确保他们的工作,但我建议你做在使用它们之前相同(以防万一)。您可以从sed
省略-i
选项,在这种情况下,它会打印出结果(而不是将它们写回文件),或者从grep
省略输出重定向>newfile.csv
。
编辑:在评论中指出,这些sed
命令的某些功能仅适用于GNU sed
。据我所知,这些是-i
选项(可以用shell重定向,sed ... <infile >outfile
替换)和\+
修改器(可以用\{1,\}
替换)。
试图只保留符合所需格式的行而不是处理一个异常的情况如何?
如果所提供的输入是你真的想匹配的内容:
grep -E '[a-z],[a-z],[a-z],[a-z]' <oldfile.csv> newfile.csv
如果输入不同的是,它提供的正则表达式不应该太难写。
最简单的:
$ grep -v ,,,, oldfile > newfile
$ mv newfile oldfile
是,AWK或者grep的都是很不错的选择,如果你是在Linux平台上工作。但是,您可以使用Perl的正则表达式为其他平台。使用加入&拆分选项。
O.M.G!踢它'老skool!它让我感觉到了ooolllldddd。 :-) – 2009-01-19 22:26:07
不会删除该行...请参阅David的更好地使用sed – orip 2009-01-19 23:01:05
它要求替换,而不是在我回答时删除。 – wnoise 2009-01-20 00:57:43