Если кто-может подскажите алгоритм работы sed.
Вот как это я понимаю.
Sed использует в своем арсенале 2 переменные:
- Основной буфер (Буфер1) и вспомогательный буфер (Буфер2)
Sed работает с файлом построчно, то есть загружает из входного потока
по одной строке(входным потоком называется какой-либо файл со строками или данные переданные команде sed по конвейеру)
Загружается 1-я строка куда ?
В Буфер 1?
Вот
1-й пример(взят со статьи в интернете)
Файл для опытов - f.txt
1-я строка
2-я строка
3-я строка
4-я строка
Скрипт меняет порядок строк, то есть строки которые были последними, становятся первыми.
sed-v1.sh#!/bin/sed -nf
# начиная со 2-й строки, содержимое буфера (который уже содержит
# все предыдущие строки) добавляется к текущей строке.
1! G
# при достижении последней строки - печатаем
$ p
# Заносим данные в буфер опять
h
# 1 - это адрес, означает 1-ю строку
# ! это символ инверсии
# Команда следующая после символа " ! "
# применяется ко всем строкам, кроме 1-й строки.
# G - Добавить новую строку к основному буферу (Буфер 1)
# и затем добавить содержимое вспомогательного буфера (Буфер 2)
# к содержимому основного (Буфер 1)
# $ - это символ регулярного выражения, означает конец строки
# p - Печать Буфера 1 (в stdout - на экран).
# Эту команду имеет смысл использовать только при использовании опции -n.
# h - Заменить содержимое вспомогательного буфера (Буфер 2) содержимым основного (Буфер 1)
начиная со 2-й строки, содержимое буфера (который уже содержит
# все предыдущие строки) добавляется к текущей строке.
Как это буфер уже что-то содержит и какой именно буфер , ?
А какой именно это буфер, 1-й или 2-й ?
Ну например как я понимаю...1. Открывается файл и в Буфер 1 - заводится 1-я строка.
2. Читается код
и команда -
1! G - сообщает, что команда
G не применяется к 1-й строке
$ - означает, что 1-я строка смотрится до конца и
p - печатается на экран.
1-я строка печатается на экран.
3. А вот дальше для 1-й строки команда h - что делает

или символ !, отменяет все команды для 1-й строки, а именно команды G и h , тогда почему срабатывает команда
p для 1-й строки?
h - Заменить содержимое вспомогательного буфера (Буфер 2) содержимым основного (Буфер 1), то есть
Буфер 1 переносится в
Буфера 2 То есть то что находилось в Буфере 2 - удаляется безвозвратно или выводится на экран при удалении из данного Буфера 2?
4. Загружается 2-я строка в Буфер 1 .
G — Добавить новую строку к основному буферу (Буфер 1) и затем добавить содержимое вспомогательного буфера (Буфер 2) к содержимому основного (Буфер 1)
5. Команда G добавляет ко 2-й строке новую, пустую строку и в Буфере 1 - содержится 2-я строка и следом за ней пустая строка
Затем эта же команда добавляет из Буфера 2 предыдущую строку, а именно 1-ю строку,
Далее все что до конца текущей строки $ в Буфере 1 - выводится на экран
$ p
По логике должно быть вот так
2-я строка
1-я строка
То есть между ними должна быть пустая строка, но ее не видно.
Я это наблюдал, когда работаешь с одной строкой в файле, тогда четко видно что командой G к строке загруженной в Буфер 1, добавляется пустая строка

h - Запись буфера в буфер2 (hold space).
Заменить содержимое вспомогательного буфера (Буфер 2),содержимым основного (Буфер 1).
Как я понимаю теперь все содержимое Буфера 1 помещается в Буфер 2 вот в таком порядке
2-я строка
1-я строка
Так ?
6. Теперь из входного потока в Буфер 1 (который уже пуст

) захватывается 3-я строка.
к ней добавляется пустая строка и содержимое Буфера 2 и содержимое Буфера 1 выводится на экран , так ?
3-я строка
2-я строка
1-я строка
и т. д
Правильно ли я все понял, ответьте по возможности на мои вопросы.
И зачем добавлять новую строку, и почему этой
пустой строки не видно, когда обрабатываемый файл имеет много строк, а не одну