Elimine todo después del punto y sobrescriba en el mismo archivo

Elimine todo después del punto y sobrescriba en el mismo archivo

El contenido del archivo es similar al siguiente.

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

Quiero eliminar todo lo que está después del punto y los cambios deben sobrescribirse en el mismo archivo.

abc
asdff

Probé a continuación, pero esto requiere redirigir a otro archivo, lo cual no quiero

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

Respuesta1

Usar -i:

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

-i[SUFIJO], --in-place[=SUFIJO]
editar archivos en el lugar (realiza una copia de seguridad si se proporciona el SUFIJO)

Respuesta2

No puede redirigir al mismo archivo: el problema obvio es sed "s/\..*//" Filename > Filenameque el shell se abre Filenamepara escribir (y lo sobrescribe) antes de que sed.

Necesitará redirigir la salida a un archivo diferente, eliminar el archivo original y luego cambiar el nombre del archivo recién creado al mismo que el original. Sed, Perl y AWK pueden hacer esto por usted:

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

Alternativamente, puedes usar sponge:

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

spongesigue almacenando en búfer lo que recibe de la entrada estándar y solo entonces lo escribe en Filename.

información relacionada