Символу перевода строки не соответствует ни одно регулярное выражение.
Образец |
Соответствие |
/^$/ |
пустая строка, т.е. только конец строки |
/./ |
непустая, т.е. по крайней мере один символ |
/^/ |
все строки |
/thing/ |
thing где либо в строке |
/^thing/ |
thing в начале строки |
/thing$/ |
thing в конце строки |
/^thing$/ |
строка, состоящая лишь из thing |
/thing.$/ |
thing плюс любой символ в конце строки |
/thing\.$/ |
thing. в конце строки |
/\/thing\// |
/thing/ где либо в строке |
/[tT]hing/ |
thing или Thing где либо в строке |
/thing[0-9]/ |
thing , за которой одна цифра |
/thing[^0-9]/ |
thing , за которой не цифра |
/thing[0-9][^0-9]/ |
thing , за которой цифра и не цифра |
/thing1.*thing2/ |
thing1 , затем любая строка, затем thing2 |
/^thing1.*thing2$/ |
thing1 в начале и thing2 в конце |
Регулярные выражения, использующие *
, выбирают самое левое совпадение с образцом до тех пор, пока это возможно. Отметим, что x*
может соответствовать нулю, а xx*
одному или более символу.
Глобальные команды
Глобальные команды g
и v
управляют вызовом одной или большего числа других команд, выполняющих преобразования в множестве строк, выбранных регулярным выражением. Команда g
наиболее часто используется для печати, подстановки или удаления множества строк:
m , n g/re/cmd |
Для всех строк между m и n , которые соответствуют re выполнить cmd |
m , n v/re/cmd |
Для всех строк между m и n , которые не соответствуют re выполнить cmd |
Командам g
и v
могут предшествовать номера строк, ограничивающие диапазон; по умолчанию принимается диапазон 1,$
:
g/.../p |
Печатать все строки, соответствующие регулярному выражению ... |
g/.../d |
Убрать все строки соответствующие ... |
g/.../s//repl/p |
Заменить первое вхождение ... в каждой строке на ' repl ', печатать измененные строки |
g/.../s//repl/gp |
Заменить каждое ... на ' repl ' , печатать измененные строки |
g/.../s/pat/repl/ |
В строках, соответствующих ... , заменить первую ' pat ' на ' repl ' |
g/.../s/pat/repl/p |
В строках, соответствующих ... , заменить первую ' pat ' на ' repl ' и печатать |
g/.../s/pat/repl/gp |
В строках, соответствующих ... , заменить все ' pat ' на ' repl ' и печатать |
v/.../s/pat/repl/gp |
В строках, не соответствующих ... , заменить все ' pat ' на ' repl ' и печатать |
v/^$/p |
Печатать все непустые строки |
g/.../cmd1\cmd2\cmd3 |
Выполнять составные команды с единственной g , присоединить \ к каждой cmd кроме последней |
Команды, управляемые командами g
или v
, также могут использовать номера строк, текущая строка настраивается по очереди на каждую выбранную строку:
g/thing/.,.+1р |
Печатать каждую строку с thing и следующую |
g/^\.EQ/.1, /^\.EN/s/alpha/beta/gp |
Заменять alpha на beta только между .EQ и .EN и печатать измененные строки |
Перемещение и копирование строк
Команда m
перемещает группу смежных строк, а команда t
копирует группу строк:
m , n ,md |
Переместить строки m по n за строку d |
m , n ,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 |
Инвертировать порядок строк |
Метки и номера строк
Команда =
печатает номер строки $
(слабое умолчание), . =
печатает номер текущей строки и т.д. Положение текущей строки не изменяется.
Читать дальше
Конец ознакомительного отрывка
Купить книгу