Как удалить строку после первой строки, которая содержит шаблон invHn3ion?
, а затем переместить первую строку в конец файла?
Где можно Я выучил все эти выражения?
Начнем с чего-нибудь попроще. В редакторе vi для перемещения первой строки в конец используйте команду ex
m
(move):
:1m$
Аргумент 1
— это исходный диапазон :первой строки. Вы можете использовать диапазон, например 2,15m$
, или сопоставление с образцом /a.*bc/m$
. Место назначения $
обозначает последнюю строку файла. Команда m
помещает перемещенный материал после целевой позиции.
Нет нулевой строки, но цель 0 указывает начало файла. Итак, чтобы вернуть линию туда, где она была:
:$m0
. переместите последнюю строку после фиктивной нулевой строки (, таким образом, перед строкой 1 ).
Итак, как насчет перемещения первой строки, соответствующей шаблону invHn3ion
? Во-первых, мы считаем, что текущая позиция может быть где угодно. Мы хотим начать поиск с первой строки, а не с текущей позиции, поэтому:
:1/invHn3ion/m$
Здесь происходит то, что m
фактически работает с адресным аргументом /invHn3ion/
. 1
— лишний адрес, который оценивается и отбрасывается 1 . Мы могли бы получить тот же эффект с двумя отдельными командами:
:1
:/invHn3ion/m$
Команда m
имеет родственнуюt
(передачу ), которая копирует, а не перемещает.
Для sed используется команда:
sed '/invHn3ion?/{h;d}; ${g}' FILE
и, на самом деле, синтаксис sed очень похож на синтаксис vi -.
Прочитайте его как /ШАБЛОН/, если ШАБЛОН найден, выполните команды h :=скопировать шаблон для сохранения пробела, d :=удалить строку. $, если он не является частью регулярного выражения, обозначает последнюю строку файла. Таким образом, в последней строке g := получить содержимое удерживаемого пространства (и распечатать его, ранее сохраненный шаблон ).
Учебник по регулярным выражениям с sed/awk/perl должен научить вас этому. Есть видео YT -и книги, снятые также для vi/vim.