Vamos detalhar o que esse comando faz.
-
> file
Isso abre
file
para gravação e trunca. -
head -n -3 file
Isto lê todas as últimas 3 linhas de
file
. Sim, o mesmofile
que você truncou na etapa 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!
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
Você pode usar o Vim no modo Ex:
ex -sc '-2,d|x' file
-2,
selecione as últimas 3 linhas
d
delete
x
salvar e fechar
Tags bash linux bash-scripting