Это переворачивает файл строка за строкой.
Файл sed '1! G; h; $! d'
Во-первых, sed
имеет место для удержания и шаблонное пространство . Мы должны различать их, прежде чем сосредоточиться на этой конкретной команде.
Когда sed
читает новую строку, она загружается в пространство шаблона. Поэтому это пространство перезаписывается каждый раз, когда обрабатывается новая строка. С другой стороны, пространство удержания является постоянным на протяжении всей обработки, и значения могут храниться там для дальнейшего использования.
Команде:
Есть 3 команды в этом заявлении: 1!G
, h
и$!d
1!G
означает, что G
команда выполняется в каждой строке, кроме первой ( !
отрицает 1
). G
означает добавить то, что находится в удерживающем пространстве в пространство образца.
h
относится к каждой строке. Он копирует пространство шаблона в пространство удержания (и перезаписывает его).
$!d
применяется к каждой строке, кроме последней ( $
представляет последнюю строку, !
отрицает ее). d
это команда для удаления строки (пробел).
- Теперь, когда первая строка прочитана,
sed
выполняется h
команда. Первая строка копируется в область удержания. Затем он удаляется, так как он соответствует $!
условию. sed
продолжается со второй строки.
- Вторая строка соответствует условию
1!
(это не первая строка), и поэтому пространство удержания (которое имеет первую строку) добавляется к пространству шаблона (которое имеет вторую строку). После этого в шаблонном пространстве появляется вторая строка, за которой следует первая строка, разделенная новой строкой. Теперь h
команда применяется (как в каждой строке); все, что находится в пространстве образца, копируется в пространство удержания. Применяется третье утверждение ( $!d
): строка удаляется из пространства шаблона.
- Шаг 2 теперь выполняется со всеми строками. Переходим к последней строке.
- В последней строке (
$
) почти весь шаг 2 выполнен, но не часть удаления ( d
). sed
, при вызове без -n
, автоматически печатает пространство шаблона в конце обработки для каждой строки ввода. Таким образом, когда не удаляется, пространство шаблона печатается. Теперь он содержит все строки в обратном порядке .