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//'
sed -e '/^[0-9]/d' filename > filename.new
или изменить на месте
sed -i -e '/^[0-9]/d' filename
Я использовал бы 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
).