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 > Filename
que o shell abre Filename
para 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
sponge
continua armazenando em buffer o que recebe da entrada padrão e só então grava em Filename
.