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 > Filename
que el shell se abre Filename
para 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
sponge
sigue almacenando en búfer lo que recibe de la entrada estándar y solo entonces lo escribe en Filename
.