Isso inverte o arquivo linha por linha.
sed '1! G; h; $! d' arquivo
Primeiro, sedpossui um espaço de espera e um espaço de padrão . Temos que distinguir entre eles antes de nos concentrarmos nesse comando específico.
Quando sedlê uma nova linha, ela é carregada no espaço do padrão. Portanto, esse espaço é substituído toda vez que uma nova linha é processada. Por outro lado, o espaço de espera é consistente em todo o processamento e os valores podem ser armazenados lá para uso posterior.
Para o comando:
Existem 3 comandos nesta declaração: 1!G, he$!d
1!Gsignifica que o Gcomando é executado em todas as linhas, exceto na primeira (a !nega a 1). Gsignifica acrescentar o que está no espaço de espera no espaço do padrão.
haplica-se a todas as linhas. Ele copia o espaço do padrão para o espaço de espera (e o substitui).
$!daplica-se a todas as linhas, exceto a última ( $representa a última linha, !nega-a). dé o comando para excluir a linha (espaço do padrão).
- Agora, quando a primeira linha é lida,
sedexecuta o hcomando. A primeira linha é copiada no espaço de espera. Em seguida, é excluído, pois corresponde à $!condição. sedcontinua com a segunda linha.
- A segunda linha corresponde à condição
1!(não é a primeira linha) e, portanto, o espaço de espera (que tem a primeira linha) é anexado ao espaço do padrão (que tem a segunda linha). Depois disso, no espaço do padrão, agora existe a segunda linha seguida pela primeira, delimitada por uma nova linha. Agora, o hcomando se aplica (como em todas as linhas); tudo o que está no espaço do padrão é copiado para o espaço de espera. A terceira instrução ( $!d) se aplica: A linha é excluída do espaço do padrão.
- A etapa 2 agora está concluída com todas as linhas. Passamos para a última linha.
- Na última linha (
$), quase toda a Etapa 2 está concluída, mas não a parte de exclusão ( d). sed, quando chamado sem -n, imprime o espaço do padrão automaticamente no final do processamento para cada linha de entrada. Portanto, quando não excluído, o espaço do padrão é impresso. Ele contém agora todas as linhas na ordem inversa .