В предыдущей главе мы узнали, как 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. Вы всегда можете узнать больше, попробовав несколько примеров самостоятельно.