Incluindo a última linha que você faria:
sed -n '/word/,$p'
Corresponde à primeira ocorrência de word
até a última linha e imprime todas as correspondências.
Não incluindo a última linha:
sed '/word/,$!d;$d'
... que exclui as correspondências negadas e exclui a última linha.
E para ir apenas do último jogo até a última linha, você precisa tentar um pouco mais:
sed -e :n -e '/\n.*word/D;N;$q;bn'
Loops - ele nunca completa o ciclo de linha normal sed
, mas anexa a próxima linha de entrada ao buffer de espaço de padrão e b
ranches novamente para fazer isso novamente. Mas quando tem pelo menos duas linhas no espaço padrão e a última corresponde a palavra , apaga tudo no buffer, mas a linha que corresponde a palavra . Na última linha, apenas quits
e quebra o loop. Então, o que é impresso é tudo, desde a última linha que está ocorrendo contendo palavra até a última linha.
Hmmm ... talvez eu tenha feito isso mais difícil do que tem que ser:
sed 'H;$x;/word/h;$!d'
Com isso, cada linha é anexada para manter o espaço. Mas as linhas que combinam com palavra então sobrescrevem retêm espaço. Cada linha no espaço padrão que não é a última linha é excluída. E na última linha, logo após ser anexado para manter espaço, os espaços hold e pattern são trocados (no caso da última linha também conter word) e tudo desde a última vez word espaço de suspensão sobrescrito é impresso.