Isso inverte o arquivo linha por linha.
sed '1! G; h; $! d' arquivo
Primeiro, sed
possui 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 sed
lê 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
, h
e$!d
1!G
significa que o G
comando é executado em todas as linhas, exceto na primeira (a !
nega a 1
). G
significa acrescentar o que está no espaço de espera no espaço do padrão.
h
aplica-se a todas as linhas. Ele copia o espaço do padrão para o espaço de espera (e o substitui).
$!d
aplica-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,
sed
executa o h
comando. A primeira linha é copiada no espaço de espera. Em seguida, é excluído, pois corresponde à $!
condição. sed
continua 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 h
comando 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 .