La man
pá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
.old
método para los cambios en el lugar,echo "$(cut -d , -f 1,3 <foo)" > foo
cut -d , -f 1,3 foo > foo.new
rm foo
mv foo.new foo
rm foo
. Y no debe llamarrm foo
, porquemv foo.new foo
es 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
cut
solo. No pude encontrarlo en el hombre o en la página de información. Puedes hacer algo comomktemp
lo convierte en un archivo temporal relativamente seguro en el que puede canalizar lacut
salida.fuente
Prueba vim-way:
Esto editará el archivo en el lugar (así que primero haga la copia de seguridad).
Alternativamente
grep
, use ,sed
ogawk
.fuente
Puede usar slurp con POSIX Awk:
Ejemplo
fuente
Bueno, dado que
cut
produce menos salida de lo que lee, puede hacer:Es decir, haga que su entrada estándar sea
file
abierta en modo de solo lectura y que seafile
abierta en modo lectura + escritura sin truncamiento (<>
).De esa manera,
cut
simplemente sobrescribirá el archivo sobre sí mismo. Sin embargo, dejará el resto del archivo intacto. Por ejemplo, sifile
contiene:La salida se convertirá en:
La
f\nb\n
han reemplazadofoo\n
, perobar
todavía está allí. Debería truncar el archivo una vez quecut
haya 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
perl
solo por eso es un poco exagerado, especialmente teniendo en cuenta queperl
puede hacer fácilmente esecut
trabajo 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