Remova tudo após o ponto e substitua no mesmo arquivo

Remova tudo após o ponto e substitua no mesmo arquivo

O conteúdo do arquivo é semelhante ao abaixo

abc.w.f.com
asdff.d.f.com
..........

Quero remover tudo após o ponto e as alterações devem ser substituídas no mesmo arquivo

abc
asdff

Tentei abaixo, mas isso requer redirecionamento para outro arquivo, o que eu não quero

sed "s/\..*//" Filename  > File2

Responder1

Usar -i:

sed -i 's/\..*$//' Filename

-i[SUFIXO], --in-place[=SUFIXO]
edite os arquivos no local (faz backup se o SUFFIX for fornecido)

Responder2

Você não pode redirecionar para o mesmo arquivo: o problema óbvio é sed "s/\..*//" Filename > Filenameque o shell abre Filenamepara gravação (e o sobrescreve) antes que o arquivo seja lido por sed.

Você precisaria redirecionar a saída para um arquivo diferente, excluir o arquivo original e, em seguida, renomear o arquivo recém-criado da mesma forma que o original. Sed, Perl e AWK podem fazer isso por você:

  • sed -i
  • perl -i
  • awk -i inplace

Alternativamente, você pode usar sponge:

  • sed "s/\..*//" Filename | sponge Filename

spongecontinua armazenando em buffer o que recebe da entrada padrão e só então grava em Filename.

informação relacionada