Tengo muchos archivos con pestañas esparcidas por todas partes, y me gustaría convertirlos a todos en espacios. Conozco el expand
comando, pero desafortunadamente tendría que escribir cada archivo que lo use. ¿Hay alguna manera más fácil de hacer esto en Linux?
linux
text-editing
persona
fuente
fuente
expand
, supongo que quiere preservar la alineación del texto.'s/\t/ /g'
reemplazar más de una pestaña por línea.find ./ -type f -exec sed -i ’s/\t/ /g’ {} +
" (es decir, "+
" en lugar de "\;
"), si lafind
versión lo admite (y personalmente no he conocido ninguna versión que no lo haga, pero no es un estándar POSIX , así que supongo que podría suceder en algunos sistemas. Consulte "-exec command {} +
" en el manual). En lugar de lanzar una instanciased
para cada archivo, esto generará una lista de argumentos con tantos argumentos de nombre de archivo como el sistema admite (getconf ARG_MAX
= 2097152 en mi sistema), al igual quexargs
, y así lanzará muchos menossed
procesos.sed
no comprende la\t
secuencia de escape de la pestaña. Puede reemplazarlo con un carácter de tabulación literal, que puede ingresar en el shell por[Ctrl]+V, [Tab]
.expand
es probablemente mejor quesed
para esto, como se explica en: stackoverflow.com/a/11094620/131824Hay muchas formas de hacer esto. También hay muchas maneras de dispararte en el pie mientras haces esto si no tienes cuidado o si eres nuevo en Linux como parece ser. Suponiendo que puede crear una lista de archivos que desea convertir, ya sea mediante el uso de algo como
find
o manualmente con un editor, simplemente canalice esa lista en lo siguiente.Una forma en la que puedes dispararte en el pie con eso es hacer un error tipográfico para que termines moviendo un archivo vacío a todos los nombres de archivo que especifiques, eliminando así el contenido de todos tus archivos. Así que tenga cuidado y pruebe lo que haga primero en un pequeño conjunto de archivos de los que ha hecho una copia de seguridad.
fuente
mv
condición de que el éxito deexpand
:expand ... && mv ...
expand -t 4
expandir las pestañas a 4 espacios. Además, este método puede crear nuevas líneas finales. Pero de lo contrario funciona.-I foo
crea una plantilla variable foo para cada línea de entrada, para que pueda consultar la entrada más de una vez.-print0
y-0
diga a ambos comandos que usen \ 0 como separador de línea en lugar de ESPACIO, por lo que este comando funciona para rutas con espacios.fuente
Contras: los
archivos más grandes que el tamaño del búfer de tubería ( 64 KB ) se truncan
Pros:
no
se truncan los archivos de archivos temporales más grandes que el tamaño del búfer de tubería
fuente
Esto es mejor:
fuente
/tmp/e
porque si algo más está usando ese archivo, esto lo estropeará. Como si dos usuarios quisieran usar esto al mismo tiempo.Le di una oportunidad a este problema con los siguientes requisitos en mente:
El último requisito fue el más difícil de cumplir porque "expandir" no permite modificar los archivos en su lugar.
Se me ocurrió la siguiente solución:
Aquí hay alguna explicación:
fuente