Saída de menos para um arquivo

1

enquanto no bash, eu tentei apagar as últimas 3 colunas de um arquivo usando:

head -n -3 file > file

mas o arquivo sai vazio. Eu posso andar por aí, mas eu gostaria de saber o que causa isso.

Muito obrigado!

    
por John Sparrow 07.01.2013 / 14:35

3 respostas

3

Vamos detalhar o que esse comando faz.

  1. > file

    Isso abre file para gravação e trunca.

  2. head -n -3 file

    Isto lê todas as últimas 3 linhas de file . Sim, o mesmo file que você truncou na etapa 1.

por 07.01.2013 / 14:41
2

O que você está tentando fazer é a substituição in-line, o que não é realmente possível sem soluções alternativas. Em seu comando, o arquivo original é sobrescrito porque já está aberto e limpo quando você envia o comando.

Aqui estão algumas ideias:

  • Use um arquivo temporário

    head -n -3 file > tmp
    mv tmp file
    
  • Use a ferramenta sponge de < href="http://joeyh.name/code/moreutils/"> moreutils , que absorve toda a entrada e grava no arquivo:

    head -n -3 file | sponge file
    
por 07.01.2013 / 14:42
0

Você pode usar o Vim no modo Ex:

ex -sc '-2,d|x' file
  1. -2, selecione as últimas 3 linhas

  2. d delete

  3. x salvar e fechar

por 11.04.2016 / 02:40