Gestión de cadenas de texto

Al querer programar con bash, quize hacer un gestor de archivos.

FILES=$(ls | grep .formato)

De esta forma puedo tener un arreglo de todos los archivos con cierta terminación. Pero, solo estan separadas por espacios, no puedo acceder a cada uno individualmente.

echo ${FILES[0]}

Pero devuelve toda la cadena

echo ${FILES[0][0]}

Pero no existe

ls -l? la verdad es que no sé como hacer para que grep no te muestre la línea entera

Sería como mostrar el texto como array.

Creo que pude ser

FILES=$(*.formato)

Luego sería bueno cambiar a cada elemento su terminación por otra respetando el array.

Así se puede hacer lo mismo que Makefile, pero con más alternativas de personalización, quedaría como más “riceado”.

Pero, lamentablemente no facilitas las donaciones, propones una peor a la otra…

Si usas solo grep ya te muestra la línea donde se encuentra la palabra. Para reducir eso ya tenés que ir usando cut u otros métodos.

No veo lo inaccesible en los medios de pago con software libre.

Para que usas el grep? BASH soporta globbing: ls *.txt

man 7 glob para leer el manual.

2 Me gusta

El problema que tienes es bastante común en bash, y simplemente es causado porque FILES=$(ls | grep .formato) no crea un array, sino una cadena de texto. Por eso echo ${FILES[0]} devuelve todos.

La forma, creo, más legible de que almacenes un array es mapfile:

mapfile -t FILES < <(ls | grep .formato)

Pruébalo. Después de ello deberías poder revisar el contenido del array individualmente con echo ${FILES[0]}, echo ${FILES[1]}, echo ${FILES[2]}


También, como bien dice @jazzyUnix, no entiendo del todo bien por qué usas grep en este caso. Para empezar, te devolvería también un archivo denominado ejemplo.formato.txt. Con el propio ls puedes:

mapfile -t FILES < <(ls *.formato)
3 Me gusta

Buenas,

Obviamente puedes seguir con Bash, pero si vas a hacer cosas complejas con archivos o directorios, puede que te sea más fácil con Perl o Python.

Un saludo