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

Много эмуляторов терминала поддерживают две копии терминального вывода: нормальный экранный буфер и альтернативный экранный буфер. Нормальный буфер для приложений командной строки, которые обычно не перемещают курсор вне текущей строки, и обеспечивает scrollback. Альтернативный буфер для полноэкранных приложений и не обеспечивает scrollback.

Взгляд, vi и другие переключаются на альтернативный экран, когда они запускают и переключаются назад, когда они выходят.

В xterm Вы видите устаревший экран путем переключения “Выставочного Экрана Альтернативы” в меню средней кнопки мыши.

Из сценария можно получить управляющую последовательность для переключения между экранами с tput smcup и tput rmcup (smcup и rmcup terminfo возможности состоят в том, чтобы переключиться в и из полноэкранного режима).

7
07.07.2014, 21:46
7 ответов

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

grep -v "Продукты ниже" вашего_файла. csv > new_file.csv

17
27.01.2020, 20:13

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

  • awk

    awk '$1!= "Файл продукта" > новый файл
    
  • perl

    perl -ne "print unless /^Products/" file > new file
    

    или

    perl -ane 'print if $F[0]!= "Products" file > new file
    

    или, чтобы отредактировать файл на месте

    perl -i -ne 'печатать, если /^Products/; ' file
    perl -i -ane 'print if $F[0]!= файл "Products" (Продукты) 
    
  • grep (это всего лишь укороченная версия ответа svq)

     grep -v ^Products file > new file
    
  • bash (просто для удовольствия)

     во время чтения строки; do [[ $line =~ ^Products ]]] || echo $line; готово < file > new file
    
5
27.01.2020, 20:13

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

$ 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
10
27.01.2020, 20:13

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

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

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

ed -s file <<<$'/Products below/d\nw\nq'
5
27.01.2020, 20:13

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

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

perl oneliner:

perl -ne 'print unless (m/Products below/') FILE
3
27.01.2020, 20:13

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

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

Теги

Похожие вопросы