Учебники

Редактор потока — диапазон шаблонов

В предыдущей главе мы узнали, как SED обрабатывает диапазон адресов. В этой главе рассказывается, как SED заботится о диапазоне шаблонов. Диапазон шаблонов может быть простым текстом или сложным регулярным выражением. Давайте возьмем пример. В следующем примере печатаются все книги автора Пауло Коэльо.

[jerry]$ sed -n '/Paulo/ p' books.txt

Выполнив приведенный выше код, вы получите следующий результат:

 3) Алхимик, Пауло Коэльо, 197 
 5) Паломничество, Пауло Коэльо, 288

В приведенном выше примере SED работает с каждой строкой и печатает только те строки, которые соответствуют строке Paulo.

Мы также можем комбинировать диапазон шаблонов с диапазоном адресов. В следующем примере печатаются строки, начиная с первого совпадения Алхимика и заканчивая пятой строкой.

[jerry]$ sed -n '/Alchemist/, 5 p' books.txt

Выполнив приведенный выше код, вы получите следующий результат:

 3) Алхимик, Пауло Коэльо, 197 
 4) Братство Кольца, JRR Толкиен, 432 
 5) Паломничество, Пауло Коэльо, 288

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

[jerry]$ sed -n '/The/,$ p' books.txt

Выполнив приведенный выше код, вы получите следующий результат:

 2) Две башни, JRR Толкиен, 352 
 3) Алхимик, Пауло Коэльо, 197 
 4) Братство Кольца, JRR Толкиен, 432
 5) Паломничество, Пауло Коэльо, 288 
 6) Игра престолов, Джордж Р. Р. Мартин, 864 

Мы также можем указать более одного диапазона шаблонов, используя оператор запятой (,). В следующем примере печатаются все линии, существующие между шаблонами Два и Паломничество.

[jerry]$ sed -n '/Two/, /Pilgrimage/ p' books.txt 

Выполнив приведенный выше код, вы получите следующий результат:

 2) Две башни, JRR Толкиен, 352 
 3) Алхимик, Пауло Коэльо, 197 
 4) Братство Кольца, JRR Толкиен, 432 
 5) Паломничество, Пауло Коэльо, 288

Кроме того, мы можем использовать оператор плюс (+) в пределах диапазона шаблона. Следующий пример находит первое вхождение шаблона Two и печатает следующие 4 строки после этого.

[jerry]$ sed -n '/Two/, +4 p' books.txt

Выполнив приведенный выше код, вы получите следующий результат:

 2) Две башни, JRR Толкиен, 352 
 3) Алхимик, Пауло Коэльо, 197 
 4) Братство Кольца, JRR Толкиен, 432 
 5) Паломничество, Пауло Коэльо, 288 
 6) Игра престолов, Джордж Р. Р. Мартин, 864 

Мы привели здесь только несколько примеров, чтобы познакомить вас с SED. Вы всегда можете узнать больше, попробовав несколько примеров самостоятельно.