从文件中删除特定行

从文件中删除特定行

我的 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

相关内容