La manpágina no me da muchas esperanzas, pero espero que sea una característica indocumentada (y / o específica de GNU).
shell
files
io-redirection
cut
Hank Gay
fuente
fuente

.oldmétodo para los cambios en el lugar,echo "$(cut -d , -f 1,3 <foo)" > foocut -d , -f 1,3 foo > foo.newrm foomv foo.new foorm foo. Y no debe llamarrm foo, porquemv foo.new fooes atómico: elimina la versión anterior y coloca la nueva versión al mismo tiempo.El paquete moreutils de ubuntu (y también debian ) tiene un programa llamado
sponge, que también resuelve su problema.De hombre esponja:
Lo que te permitiría hacer algo como:
fuente
No creo que sea posible usar
cutsolo. No pude encontrarlo en el hombre o en la página de información. Puedes hacer algo comomktemplo convierte en un archivo temporal relativamente seguro en el que puede canalizar lacutsalida.fuente
Prueba vim-way:
Esto editará el archivo en el lugar (así que primero haga la copia de seguridad).
Alternativamente
grep, use ,sedogawk.fuente
Puede usar slurp con POSIX Awk:
Ejemplo
fuente
Bueno, dado que
cutproduce menos salida de lo que lee, puede hacer:Es decir, haga que su entrada estándar sea
fileabierta en modo de solo lectura y que seafileabierta en modo lectura + escritura sin truncamiento (<>).De esa manera,
cutsimplemente sobrescribirá el archivo sobre sí mismo. Sin embargo, dejará el resto del archivo intacto. Por ejemplo, sifilecontiene:La salida se convertirá en:
La
f\nb\nhan reemplazadofoo\n, perobartodavía está allí. Debería truncar el archivo una vez quecuthaya finalizado.Con
ksh93, puede hacerlo con su<>;operador, que actúa como,<>excepto que si el comando tiene éxito,ftruncate()se llama en el descriptor de archivo. Entonces:Con otros proyectiles, deberías hacerlo a
ftruncate()través de otros medios como:aunque invocar
perlsolo por eso es un poco exagerado, especialmente teniendo en cuenta queperlpuede hacer fácilmente esecuttrabajo como:Tenga en cuenta que con todos los métodos que implican una reescritura real en el lugar, si la operación se interrumpe a mitad de camino, terminará con un archivo dañado. El uso de un segundo archivo temporal evita este problema.
fuente