Вход/Регистрация
Командная строка Linux
вернуться

Шоттс Уильям

Шрифт:

[me@linuxbox ~]$ echo "front" | sed '1s/front/back/'

back

Добавление адреса 1 в команду гарантирует применение операции подстановки только к первой строке в нашем однострочном потоке. Можно указать другое число:

[me@linuxbox ~]$ echo "front" | sed '2s/front/back/'

front

Теперь, как видите, редактирование не было выполнено, потому что во входном потоке отсутствует строка с номером 2.

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

Таблица 20.7. Форма записи адресов в команде sed

Адрес

Описание

n

Номер строки, где n — положительное число

$

Последняя строка

/регулярное_выражение/

Строки, соответствующие простому регулярному выражению POSIX. Обратите внимание, что регулярное выражение должно ограничиваться символом слеша с обеих сторон. При желании можно использовать другие ограничительные символы, определив регулярное выражение в форме \cрегулярное_выражениеc, где c — альтернативный символ-ограничитель

адр1,адр2

Диапазон строк с номерами от адр1 по адр2 включительно. Каждый адрес может иметь любую форму из перечисленных выше

первая~шаг

Соответствует строке с номером первая и каждой последующей с указанным шагом. Например, адрес 1~2 соответствует всем строкам с нечетными номерами, а адрес 5~5 соответствует пятой строке и каждой пятой последующей

адр1,+n

Соответствует строке с адресом адр1 и следующим за ней n строкам

adr!

Соответствует всем строкам, кроме строки с адресом адр, где адрес может иметь любую форму из перечисленных выше

Рассмотрим разные способы адресации строк на примере файла distros.txt, созданного выше в этой главе. Сначала попробуем диапазоны номеров строк:

[me@linuxbox ~]$ sed -n '1,5p' distros.txt

SUSE 10.2 12/07/2006

Fedora 10 11/25/2008

SUSE 11.0 06/19/2008

Ubuntu 8.04 04/24/2008

Fedora 8 11/08/2007

В нашем примере мы вывели строки с 1 по 5. Для этого использовалась команда p, которая просто выводит строки, соответствующие адресам. Однако здесь нам пришлось добавить параметр -n (параметр подавления автоматического вывода), чтобы программа sed не выводила все строки, что она делает по умолчанию.

Далее попробуем задействовать регулярное выражение:

[me@linuxbox ~]$ sed -n '/SUSE/p' distros.txt

SUSE 10.2 12/07/2006

SUSE 11.0 06/19/2008

SUSE 10.3 10/04/2007

SUSE 10.1 05/11/2006

Включив регулярное выражение /SUSE/, заключенное в символы слеша, мы смогли выделить строки подобно тому, как это делает программа grep.

Наконец, попробуем применить оператор отрицания, добавив в адрес восклицательный знак (!):

[me@linuxbox ~]$ sed -n '/SUSE/!p' distros.txt

Fedora 10 11/25/2008

Ubuntu 8.04 04/24/2008

Fedora 8 11/08/2007

Ubuntu 6.10 10/26/2006

Fedora 7 05/31/2007

Ubuntu 7.10 10/18/2007

Ubuntu 7.04 04/19/2007

Fedora 6 10/24/2006

Fedora 9 05/13/2008

Ubuntu 6.06 06/01/2006

Ubuntu 8.10 10/30/2008

Fedora 5 03/20/2006

Здесь мы видим ожидаемый результат: все строки из файла, кроме совпавших с регулярным выражением.

Пока что мы познакомились лишь с двумя командами редактирования, поддерживаемыми программой sed, s и p. В табл. 20.8 приводится более полный список основных команд редактирования.

Таблица 20.8. Основные команды редактирования sed

Команда

Описание

=

Выводит номер текущей строки

a

Добавляет текст в конец текущей строки

d

Удаляет текущую строку

i

Вставляет текст в начало текущей строки

p

Выводит текущую строку. По умолчанию sed выводит все строки, но редактирует только соответствующие указанному адресу. Поведение по умолчанию можно отменить, передав параметр -n

q

Завершает sed без обработки остальных строк. Если параметр -n не указан, выводит текущую строку

  • Читать дальше
  • 1
  • ...
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: