em sed $ é a última linha para excluir a última linha:
sed '$d' <file>
Eu uso sed para excluir rapidamente as linhas com posição específica como
sed '1d'
sed '5d'
Mas, e se eu quiser excluir a última linha do arquivo e não souber a contagem de linhas (sei que posso conseguir isso usando wc e vários outros truques).
Atualmente, use uma solução alternativa com head e tail combinada com wc para fazer isso. Alguma reviravolta rápida aqui?
$ para a última linha:
sed '$d' file
cat file.txt | head -n -1 > new_file.txt
file.txt (se terminar com EOF , ou \n e depois EOF ), o número de linhas em new_file.txt pode ser o mesmo ( como file.txt ) após esse comando (isso acontece quando não há \n ) - em qualquer caso, o conteúdo da última linha é excluído.
Além disso, observe que você deve usar um segundo arquivo (intermediário). Se você gato e redirecionar para o mesmo arquivo, você vai apagá-lo.
head --lines=-1 . Eu primeiro deparei com essa possibilidade no man-page para a cabeça em um sistema SLES11SP2 (coreutils-8.12-6.23.1)
tail e head fazem parte do coreutils -rpm (pelo menos para sistemas baseados em rpm).
De acordo com o changelog do coreutils, esta sintaxe é suportada desde o coreutils-versão 5.0.1
Más notícias: De acordo com o RH5-man-page, essa opção não é descrita
Boas notícias: Funciona com o RH5 (portanto, no seu caso: funciona - pelo menos com uma versão atual do RH5).
rpm -q coreutils me mostra (no CentOS 5.8):
coreutils-5.97-34.el5_8.1
Não tenho certeza se RH5.5. já tem a versão coreutils que a suporta. Mas o 5.5 tem o EoLed de qualquer maneira.
Tags text-processing sed