Excluir a última linha do arquivo

34

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?

    
por mtk 24.10.2012 / 16:37

4 respostas

66

em sed $ é a última linha para excluir a última linha:

sed '$d' <file>
    
por 24.10.2012 / 16:43
23

$ para a última linha:

sed '$d' file
    
por 24.10.2012 / 16:44
10

cat file.txt | head -n -1 > new_file.txt

Beware, parece, dependendo da última linha de 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.

    
por 24.10.2012 / 23:22
4

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.

    
por 20.11.2012 / 11:07