Удаление определенной строки из файла

Где-то в середине моего 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 

Самый простой способ – использовать команду grep -v :

grep -v "Products below" your_file.csv > new_file.csv

С помощью ваших входных данных вы можете попробовать:

 $ 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 

Если мы с уверенностью можем предположить, что вы хотите удалить все строки, которые начинаются с Products (включая пробел после 1-го слова), все это будет работать:

  • AWK

     awk '$1!="Products" file > newfile 
  • Perl

     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 

на месте с ed (в подсказке bash )

 ed -s file <<<$'/Products below/d\nw' 

Или, как рекомендует Don crissti :

 ed -s file <<<$'/Products below/d\nw\nq' 

Вы можете использовать sed для поиска, чтобы удалить каждую строку, содержащую этот шаблон

 sed -i '/Products below this line are out of stockNumber, month, year, reference, store/d' file 

perl oneliner:

 perl -ne 'print unless (m/Products below/') FILE 

Вот еще один пример использования sed :

 sed '/^Products below this line are out of stockNumber, month, year, reference, store$/d' originalDocument > newDocument