Como posso excluir a primeira linha de um arquivo e manter as alterações?
Eu tentei isso, mas apaga todo o conteúdo do arquivo.
$sed 1d file.txt > file.txt
shell-script
sed
ksh
kickass13
fonte
fonte
sed
, você pode usarsed -i .bak '1d' file.txt
.ed
.ed
comando seria:printf "%s\n" 1d w q | ed file.txt
(I heart ed)-exec sed -i '1d' {} \;
Uma opção alternativa muito leve é apenas para 'arrastar' tudo, exceto a primeira linha (essa pode ser uma maneira fácil de remover os cabeçalhos de arquivos em geral):
Seguindo @Evan Teitelman, você pode:
Para evitar um arquivo temporário. Outra opção pode ser:
E assim por diante. Testando o último:
Opa, perdemos uma nova linha (de acordo com o comentário @ 1_CR abaixo), tente:
Voltando ao sed, tente:
ou talvez
Para evitar efeitos colaterais.
fonte
tail
truque funcionou para mim (levou menos de 3 segundos em um arquivo de 130mb). Obrigado!echo "$(tail -n +2 file.txt)" > file.txt
é a resposta perfeita.Também dê uma olhada
sponge
a partirmoreutils
.sponge
absorve os dados da entrada padrão até o final da gravação da entrada padrão fechar antes de gravar em um arquivo. É usado assim:fonte
Este tópico é de interesse, então testei o benchmark de três maneiras:
sed '1d' d.txt > tmp.txt
tail -n +2 d.txt > tmp.txt
sed -i '1d' d.txt
Observe que o destino
d.txt
é um arquivo de 5,4 GBObtenha o resultado:
Conclusão: Parece abaixo a maneira mais rápida:
sed '1d' file.txt > tmpfile; mv tmpfile file.txt
fonte
sed '1d' d.txt
método não incluiu (ou pelo que parece, lendo seus testes) omv
comando. Nos meus testes no FreeBSD com um arquivo de 20 MB,sed -i
foi o mais rápido.ex
pode ser usado para edição in-loco verdadeiraque não envolve um arquivo temporáriofonte
strace -e open ex -c ':1d' -c ':wq' foo
. ex trunca o arquivo original com o arquivo temporário, onde a opção -i do GNU sed sobrescreve o original com o arquivo temporário. Não tenho certeza de como funciona o sed do BSD.A maneira mais curta e simples de excluir a primeira linha de um arquivo usando
sed
é:fonte
Você pode usar o Vim no modo Ex:
1
encontre a primeira linhad
excluirx
salvar e fecharfonte
Este comando removerá 1 linha e salvará como "file.txt".
fonte
Para excluir uma linha praticiler no arquivo
Arquivo Sed '1d'
Arquivo '1d3d' sed
Excluir caractere em linha
1 Excluir as duas primeiras cartas em lin
Arquivo Sed 's /^..//'
2 Exclua as últimas duas linhas de chrectercin
Arquivo Sed / .. £ // '
3 Excluir linha em branco
Arquivo Sed '/ ^ £ / d'
fonte
£
≠$
.Pode usar o vim para fazer isso:
fonte
arquivo de gato01 | sed -e '1,3d'
// mostra o conteúdo no arquivo01, mas remove a primeira e a terceira linha
fonte