tipo Unix

tipo Unix

Estoy intentando hacer algo bastante simple. Tengo 40 archivos de texto en los que necesito eliminar todo y reemplazarlo con el contenido de un archivo de texto de plantilla.

¿Cuál es la forma más fácil/rápida?

NB: No quiero buscar y reemplazar, sino eliminar todo y luego copiarlo dentro. Eso sería como abrir el archivo, ctrl + A >> del >> ctrl + v para cada archivo

Respuesta1

tipo Unix

En una línea de comandos similar a Unix (en Linux, OSX, etc.), puede utilizarla catpara imprimir el contenido de un archivo en STDOUT y >redirigir STDOUT a un archivo, sobrescribiendo su contenido.

cat template.txt > file.txt

La forma más sencilla es colocarlo template.txten un directorio separado, luego puede usar un bucle for para afectar cada *.txt en el directorio de trabajo:

for f in ./*.txt; do cat /path/to/template.txt > "$f"; done

En sistemas con bash 4+ (es probable que cualquier *nix moderno tenga esto; verifique con bash --version), puede usar globbing extendido, para que pueda tener template.txten el mismo directorio que los archivos que desea sobrescribir:

shopt -s extglob
for f in ./!(*template).txt; do cat template.txt > "$f"; done

Si tiene archivos de texto en muchos subdirectorios (ADVERTENCIA: ESTO SOBREESCRIBIRÁTODO *.txtARCHIVOS EN EL DIRECTORIO DE TRABAJO Y TODOS SUS SUBDIRECTORIOS, Y TODOS SUS SUBDIRECTORIOS...), puedes usar globstar:

shopt -s globstar
for f in ./**/*.txt; do cat /path/to/template.txt > "$f"; done

##  OR:
shopt -s globstar extglob
for f in ./**/!(*template).txt; do cat template.txt > "$f"; done

ventanas

Esto funciona de manera similar, aunque la sintaxis es diferente. En lugar de cat, utilice type:

type template.txt > file.txt

Para trabajar en cada uno .txtde un directorio:

FOR %F IN (*.txt) DO type C:\path\to\template.txt > %F

Para recursividad, utilice /R:

FOR /R %F IN (*.txt) DO type C:\path\to\template.txt > %F

Respuesta2

Bueno, lo que desea se puede hacer mediante una búsqueda y reemplazo automatizados (como lo que hace powergrep pero gratis), pero es más fácil simplemente tomar la plantilla y copiarla como cada archivo nuevo. Esto se puede hacer desde la línea de comando.

Cree un archivo con una lista de todos los nombres de archivo en los que desea colocar esa plantilla.

Entonces listoffiles.txt tiene contenido:

archivo1.txt
archivo2.txt
archivo3.txt

Luego abra un mensaje cmd y haga:

C:\fdf>para /f %f en (listoffiles.txt) hacer @echo copiar template.txt %f

copiar plantilla.txt archivo1.txt
copiar plantilla.txt archivo2.txt
copiar plantilla.txt archivo3.txt

C:\fdf>

Simplemente cambie la línea @echo copy template.txt para leer copy template.txt. es decir, elimine el @echo o solo el eco.

Necesita listoffiles.txt en c:\fdf y template.txt allí también. Y creará file1.txt file2.txt, etc.

información relacionada