Escribir una palabra en cada archivo txt en una carpeta

Respuestas:

20

Un simple para hará el trabajo:

for i in ./*.txt; do echo 'cat' >> "$i"; done;

Esto obtendrá una lista de todos los archivos txt en el directorio actual, los recorre por todos echolados y los agrega (agrega al contenido). puede cambiar >>a >, para sobrescribir el contenido de los archivos con cat.

Otra cosa que puede hacer es usar teepara redirigir una secuencia a múltiples archivos.

Para anexar:

echo "cat" | tee -a *.txt

Para sobrescribir:

echo "cat" | tee *.txt
Ravexina
fuente
¿Cuál es la estafa para usar echo "cat" >> *.txt?
hytromo
44
@hakermania con la que debería fallarambiguous redirect
Zanna
13

Si los archivos no están vacíos, puede usarlos sedsin bucles. Para agregar catal inicio:

sed 'i\cat' *.txt

Para agregar al final:

sed 'a\cat' *.txt

Para agregar después de la segunda línea:

sed '2 a\cat' *.txt

Para agregar líneas anteriores con fooellas:

sed '/foo/ i\cat' *.txt

Sin embargo, no funciona en archivos vacíos. Una especie de error.

(Para realmente escribir en los archivos después de las pruebas que necesita la -iopción: sed -i 'a\cat' *.txt)

Zanna
fuente
Odio sed :)), porque hay muchas cosas que puedes hacer con él y no estoy al tanto de ellas :))
Ravexina
@Ravexina sedes mi mermelada;)
Zanna
¿Por qué 'i\cat'usa la barra diagonal inversa en lugar de la barra diagonal?
phuclv
@ LưuVĩnhPhúc la barra invertida es opcional en realidad, también puede poner 'icat'o i cat. La barra invertida es convencional, creo. No se puede usar la barra frontal, se insertará literalmente
Zanna
4

Enfoque de Python:

#!/usr/bin/env python
import sys

for i in sys.argv[1:]:
    with open(i,'w') as fd:
        fd.write("cat\n")
  • usa el sysmódulo para iterar sobre los argumentos de la línea de comandos
  • cada argumento de la línea de comandos se abrirá como archivo para escribir
  • "cat" con nueva línea se escribirá en el archivo antes de pasar al siguiente

El uso sería como ./add_cat.py *.txt, que funcionaría en todos los .txtarchivos en el directorio de trabajo actual. La mejora de esto podría incluir el uso de la línea de comando argumento # 1 como cadena para escribir en lugar de codificar "cat" allí.

Sergiy Kolodyazhnyy
fuente