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