В этой главе мы рассмотрим, как именно работает SED. Чтобы стать опытным пользователем SED, нужно знать его внутренности. SED следует простой рабочий процесс: чтение, выполнение и отображение. Следующая диаграмма изображает рабочий процесс.
-
Чтение : SED читает строку из входного потока (файл, канал или стандартный ввод) и сохраняет ее во внутреннем буфере, называемом буфером шаблонов .
-
Выполнить : все команды SED применяются последовательно к буферу шаблонов. По умолчанию команды SED применяются ко всем линиям (глобально), если не указана адресация строк.
-
Дисплей : отправить (измененное) содержимое в выходной поток. После отправки данных буфер шаблонов будет пуст.
-
Вышеописанный процесс повторяется до тех пор, пока файл не будет исчерпан.
Чтение : SED читает строку из входного потока (файл, канал или стандартный ввод) и сохраняет ее во внутреннем буфере, называемом буфером шаблонов .
Выполнить : все команды SED применяются последовательно к буферу шаблонов. По умолчанию команды SED применяются ко всем линиям (глобально), если не указана адресация строк.
Дисплей : отправить (измененное) содержимое в выходной поток. После отправки данных буфер шаблонов будет пуст.
Вышеописанный процесс повторяется до тех пор, пока файл не будет исчерпан.
Указывает на заметку
-
Буфер шаблонов — это частная, в памяти, энергозависимая область хранения, используемая SED.
-
По умолчанию все команды SED применяются к буферу шаблонов, поэтому входной файл остается неизменным. GNU SED предоставляет способ изменить входной файл на месте. Мы рассмотрим это в следующих разделах.
-
Существует еще одна область памяти, называемая удерживающим буфером, которая также является частной, оперативной, оперативной областью хранения. Данные могут быть сохранены в буфере хранения для последующего извлечения. В конце каждого цикла SED удаляет содержимое буфера шаблонов, но содержимое буфера удержания остается постоянным между циклами SED. Однако команды SED не могут быть непосредственно выполнены в буфере удержания, поэтому SED позволяет перемещать данные между буфером удержания и буфером шаблона.
-
Первоначально буферы паттернов и держателей пусты.
-
Если входные файлы не предоставлены, то SED принимает входные данные из стандартного входного потока (stdin).
-
Если диапазон адресов не указан по умолчанию, то SED работает на каждой строке.
Буфер шаблонов — это частная, в памяти, энергозависимая область хранения, используемая SED.
По умолчанию все команды SED применяются к буферу шаблонов, поэтому входной файл остается неизменным. GNU SED предоставляет способ изменить входной файл на месте. Мы рассмотрим это в следующих разделах.
Существует еще одна область памяти, называемая удерживающим буфером, которая также является частной, оперативной, оперативной областью хранения. Данные могут быть сохранены в буфере хранения для последующего извлечения. В конце каждого цикла SED удаляет содержимое буфера шаблонов, но содержимое буфера удержания остается постоянным между циклами SED. Однако команды SED не могут быть непосредственно выполнены в буфере удержания, поэтому SED позволяет перемещать данные между буфером удержания и буфером шаблона.
Первоначально буферы паттернов и держателей пусты.
Если входные файлы не предоставлены, то SED принимает входные данные из стандартного входного потока (stdin).
Если диапазон адресов не указан по умолчанию, то SED работает на каждой строке.
Примеры
Давайте создадим текстовый файл quote.txt, содержащий цитату известного автора Пауло Коэльо.
[Джерри] $ vi quote.txt Есть только одна вещь, которая делает мечту невозможной: страх неудачи. - Пауло Коэльо, Алхимик
Чтобы понять рабочий процесс SED, давайте отобразим содержимое файла quote.txt с помощью SED. Этот пример имитирует команду cat .
[jerry]$ sed '' quote.txt
Когда приведенный выше код будет выполнен, он даст следующий результат.
Есть только одна вещь, которая делает мечту невозможной: страх неудачи.
В приведенном выше примере quote.txt — это имя входного файла, а перед этим есть пара одинарных кавычек, которая подразумевает команду SED. Давайте демистифицируем эту операцию.
Сначала SED читает строку из входного файла quote.txt и сохраняет ее в своем буфере шаблонов. Затем он применяет команды SED к шаблону буфера. В нашем случае нет никаких команд SED, следовательно, никакая операция не выполняется над буфером шаблона. Наконец, он удаляет и печатает содержимое буфера шаблонов на стандартном выходе. Разве это не просто?
В следующем примере SED принимает ввод из стандартного потока ввода.
[jerry]$ sed ''
Когда приведенный выше код будет выполнен, он даст следующий результат.
Есть только одна вещь, которая делает мечту невозможной: страх неудачи. Есть только одна вещь, которая делает мечту невозможной: страх неудачи.
Здесь первая строка вводится через клавиатуру, а вторая — вывод, генерируемый SED. Чтобы выйти из сеанса SED, нажмите Ctrl-D (^ D).