Литмир - Электронная Библиотека
Содержание  
A
A

Команды, управляемые командами

g
или
v
, также могут использовать номера строк, текущая строка настраивается по очереди на каждую выбранную строку:

g/thing/.,.+1р
Печатать каждую строку с
thing
и следующую
g/^\.EQ/.1, /^\.EN/s/alpha/beta/gp
Заменять
alpha
на
beta
только между
.EQ
и
.EN
и печатать измененные строки
Перемещение и копирование строк

Команда

m
перемещает группу смежных строк, а команда
t
копирует группу строк:

<i>m</i>,<i>n</i>,md
Переместить строки m по n за строку d
<i>m</i>,<i>n</i>,td
Скопировать строки m по n за строку d

Если исходные строки не определены, используется текущая строка. Строка назначения

d
не может быть в диапазоне
m,n-1
. Ниже приведено несколько общих идиом, включающих
m
и
t
.

m+
Поместить текущую строку после следующей (переставить)
m-2
Поместить текущую строку перед предыдущей
m--
То же самое: это то же, что
-2
m-
Ничего не делать
m$
Поместить текущую строку в конец (
m0
— поместить в начало)
t.
Дублировать текущую строку (
t$
дублирует в конце)
-,.t.
Дублировать предыдущую и текущую строки
1,$t$
Дублировать все множество строк
g/^/m0
Инвертировать порядок строк
Метки и номера строк

Команда

=
печатает номер строки
$
(слабое умолчание), .
=
печатает номер текущей строки и т.д. Положение текущей строки не изменяется.

Команда

kc
метит нужную строку буквой
с
; впоследствии на эту строку можно ссылаться с помощью
'c
. Команда
k
не меняет положение текущей строки. Метки удобны при перемещении больших фрагментов текста, поскольку они остаются привязанными к строкам, как показано в приведенной ниже последовательности:

/.../ka
Найти строку
...
и пометить буквой
a
/.../kb
Найти строку
...
и пометить буквой
b
'a,'bp
Печатать целый диапазон, чтобы быть уверенным
/.../
Найти нужную строку
'а,'bm
Поместить выбранные строки после нее
Объединение, расщепление и реорганизация строк

Строки могут быть объединены с помощью команды

j
(пробелы не добавляются):

<i>m</i>,<i>n</i>j
объединяет строки с
m
по
n
в одну
jp
Объединить текущую строку со следующей и печатать
-,.jp
Объединить предыдущую строку с текущей и печатать

По умолчанию принимается диапазон

.,.+1
;

Строки можно расщепить командой подстановки, отделив новую строку:

s/part1part2/part1\part2/
Расщепить строку на две части
s/ /\ /g
Расщепить по каждому пробелу. Оставить одно слово на строку

Текущей становится последняя созданная строка.

Чтобы манипулировать не только целыми фрагментами, выбираемыми регулярными выражениями, но и их соответствующими частями, используйте помеченные регулярные выражения: если конструкция

\(...\)
появляется в регулярном выражении, то часть соответствующего ей фрагмента доступна как
\1
. Возможно до девяти помеченных выражений, на которые ссылаются с помощью
\1
,
\2
и т.д.

s/\(...\)\(.*\)/\2\1/
Поместить 3 первых символа в конец
/\(..*\)\1/
Найти строки, содержащие повторяющиеся смежные цепочки символов
Команды, работающие с файлами

Командам

r
и
w
(читать и писать) могут предшествовать номера строк:

141
{"b":"248117","o":1}