Esto invierte el archivo línea por línea.
Archivo sed '1! G; h; $! d'
Primero, sed
tiene un espacio de espera y un espacio de patrón . Tenemos que distinguir entre ellos antes de concentrarnos en ese comando específico.
Cuando sed
lee una nueva línea, se carga en el espacio del patrón. Por lo tanto, ese espacio se sobrescribe cada vez que se procesa una nueva línea. Por otro lado, el espacio de retención es consistente en todo el procesamiento y los valores pueden almacenarse allí para su uso posterior.
Al comando:
Hay 3 comandos de esta declaración: 1!G
, h
y$!d
1!G
significa que el G
comando se ejecuta en cada línea excepto en la primera ( !
niega la 1
). G
significa agregar lo que está en el espacio de espera al espacio del patrón.
h
se aplica a cada línea. It copias espacio de patrones para el espacio de la bodega (y sobrescribe).
$!d
se aplica a todas las líneas excepto la última ( $
representa la última línea, la !
niega). d
es el comando para eliminar la línea (espacio del patrón).
- Ahora, cuando se lee la primera línea,
sed
ejecuta el h
comando. La primera línea se copia en el espacio de espera. Luego se elimina, ya que coincide con la $!
condición. sed
continúa con la segunda línea.
- La segunda línea coincide con la condición
1!
(no es la primera línea), por lo que el espacio de espera (que tiene la primera línea) se agrega al espacio del patrón (que tiene la segunda línea). Después de eso, en el espacio del patrón, ahora está la segunda línea seguida de la primera línea, delimitada por una nueva línea. Ahora, se h
aplica el comando (como en cada línea); todo lo que está en el espacio del patrón se copia en el espacio de espera. Se $!d
aplica la tercera declaración ( ): la línea se elimina del espacio del patrón.
- El paso 2 ahora se realiza con todas las líneas. Saltamos a la última línea.
- En la última línea (
$
), casi todo el Paso 2 está hecho, pero no la parte de eliminación ( d
). sed
, cuando se invoca sin -n
, imprime el espacio del patrón automáticamente al final del procesamiento para cada línea de entrada. Entonces, cuando no se elimina, se imprime el espacio del patrón. Contiene ahora todas las líneas en orden inverso .