острота sed для удаления любой строки, которая начинается с цифры

sed -e ':begin;s/pattern//2;t begin'

или без sed goto:

sed -e 's/\(pattern\)/\1\n/;h;s/.*\n//;s/pattern//g;H;g;s/\n.*\n//'

Универсальные решения удалить из энного (3, например) положение:

sed -e ':begin;s/pattern//4;t begin'
sed -e 's/\(pattern\)/\1\n/;h;s/.*\n//3;s/pattern//g;H;g;s/\n.*\n//'
3
21.05.2011, 03:43
3 ответа
sed -e '/^[0-9]/d' filename > filename.new

или изменить на месте

sed -i -e '/^[0-9]/d' filename
9
27.01.2020, 21:07

Я использовал бы grep(1) для этого:

grep -v '^[0-9]' filename

^[0-9] соответствия любая строка, которая начинается с цифры, и -v исключает строки то соответствие, вместо включительно Можно также использовать класс символов [:digit:] вместо [0-9].

Вместо -v можно инвертировать диапазон:

grep '^[^0-9]' filename

Это будет соответствовать любой строке, которая не запускается с цифры, но она не будет соответствовать пустым строкам.

С grep, sed и awk, мое общее правило состоит в том, что для соответствия и простого извлечения, использовать grep, для перезаписи не сохраняющей состояние использовать sed и для модификаций с сохранением информации, использовать awk. Именно поэтому я предлагаю использовать grep вместо sed как Вы попросили в своем вопросе (и другие уже ответили за sed).

9
27.01.2020, 21:07
  • 1
    +1, так как я согласовываю это, является больше работой grep, никакая потребность обеспокоиться с sed. Мне' нравится знать так или иначе, который дает лучшие действия (который должен иметь значение), –  neurino 21.05.2011, 16:47
sed -e '/^[0-9].*$/d' oldfile > newfile
1
27.01.2020, 21:07

Теги

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