我的 CSV 文件中间有这样一行:
Products below this line are out of stockNumber, month, year, reference, store
注意:数字、月份、年份、参考号和商店是 CSV 字段。
如何使用命令行命令从文件中删除这一行?
注意 CSV 是这样的
Number, month, year, reference, store
1,1,2014,13322,main
2,2,2014,13322,main
3,3,2011,1322,main
4,4,2012,3322,main
5,4,2013,122,secondary
Products below this line are out of stockNumber, month, year, reference, store
12,411,2010,122,Albany
25,41,2009,122,Dallas
35,24,2008,122,New
答案1
最简单的方法是使用grep -v
命令:
grep -v "Products below" your_file.csv > new_file.csv
答案2
根据您的输入数据,您可以尝试:
$ sed '/^Products/d' file
Number, month, year, reference, store
1,1,2014,13322,main
2,2,2014,13322,main
3,3,2011,1322,main
4,4,2012,3322,main
5,4,2013,122,secondary
12,411,2010,122,Albany
25,41,2009,122,Dallas
35,24,2008,122,New
用于sed -i.bak
就地编辑文件并创建备份文件:
sed -i.bak '/^Products/d' file
答案3
如果我们可以安全地假设您要删除以Products
(包括第一个单词后面的空格)开头的所有行,那么这些都将起作用:
awk
awk '$1!="Products" file > newfile
珀尔
perl -ne 'print unless /^Products/' file > newfile
或者
perl -ane 'print if $F[0]!="Products"' file > newfile
或者,就地编辑文件
perl -i -ne 'print unless /^Products/; ' file perl -i -ane 'print if $F[0]!="Products"' file
grep (这只是一个较短的版本svq 的回答)
grep -v ^Products file > newfile
bash(只是为了好玩)
while read line; do [[ $line =~ ^Products ]] || echo $line; done < file > newfile
答案4
您可以使用sed
搜索模式来删除包含该模式的每一行
sed -i '/Products below this line are out of stockNumber, month, year, reference, store/d' file