Это переворачивает файл строка за строкой.
Файл 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, автоматически печатает пространство шаблона в конце обработки для каждой строки ввода. Таким образом, когда не удаляется, пространство шаблона печатается. Теперь он содержит все строки в обратном порядке .