4 Explorando texto y flujo de datos de Bash
En esta sección aprenderemos a trabajar con archivos de texto usando herramientas básicas de la terminal. Comenzaremos creando y organizando directorios, luego construiremos nuestros propios archivos con un editor y finalmente aprenderemos a explorarlos, buscar patrones y combinar comandos para analizar su contenido.
4.1 Manipulación de archivos
En la terminal trabajamos dentro de un sistema de archivos organizado en directorios.
Un directorio cumple la misma función que una “carpeta” en una computadora, pero en el contexto de la línea de comandos se utiliza el término directorio porque proviene de la estructura jerárquica del sistema operativo (como el “árbol de directorios”), no de una metáfora gráfica.
La organización en directorios es fundamental para mantener un espacio de trabajo claro y ordenado, especialmente cuando trabajamos con muchos archivos o con proyectos que contienen datos, scripts y resultados.
Para crear y eliminar directorios usaremos dos comandos básicos:
mkdir- crea directorios nuevosrmdir- elimina directorios vacíos
Estos comandos permiten organizar tu trabajo de manera estructurada desde la terminal.
- ¿Cuál es la línea de comando para crear un directorio llamado “mi primer directorio”?
Al escribir nombres con varias palabras, Bash interpreta cada espacio como si fuera un argumento diferente. Para evitar problemas, es recomendable usar un separador
- ¿Qué ocurre si no utilizo separadores para crear “mi primer directorio”?
- Enlista los archivos que hay en el directorio actual
- Elimina los directorios creados en el inciso 2)
4.2 Creación de un archivo de texto
Antes de crear y manipular un archivo de texto, aclaremos algunos conceptos básicos:
¿Qué es un archivo de texto?
Es un archivo formado por líneas de caracteres que pueden incluir letras, números, espacios y signos de puntuación. No contiene formato (negritas, colores, tamaño de letra), solo texto plano.
¿Qué es una línea?
Una línea es un conjunto de caracteres que termina con un salto de línea. Aunque un párrafo se vea largo, si no contiene saltos de línea, sigue siendo una sola línea para la computadora.
¿Qué es un carácter?
Un carácter es cualquier símbolo individual: letras (a, b, c), números (0–9), espacios, puntos, comas, saltos de línea, etc.
¿Qué es un editor de texto en terminal?
Es un programa que permite crear o modificar archivos sin un entorno gráfico.
Ahora posicionemonos en el directorio con el comando cd: y utilicemos por primera vez el comando nano para crear un archivo de texto
cd mi_primer_directorio/nano fragmento.txtEl editor nano es uno de los editores de texto más sencillos y accesibles en Linux.
Permite crear y modificar archivos directamente desde la terminal sin necesidad de interfaces gráficas, lo que lo convierte en una herramienta esencial cuando se trabaja en servidores remotos o entornos bioinformáticos.
Al abrir un archivo con nano, verás el contenido del archivo (si existe) y, en la parte inferior, una lista de comandos abreviados.
Los atajos se indican con el símbolo ^, que representa la tecla Ctrl.
Por ejemplo, ^O significa presionar Ctrl + O.
Una vez dentro de nano, puedes escribir, editar, guardar y salir usando los comandos que aparecen al pie de la pantalla.
Principales comandos de nano
| Atajo | Acción | Descripción |
|---|---|---|
Ctrl + O |
Guardar archivo | Guarda los cambios sin salir. |
Ctrl + X |
Salir | Cierra nano (pide guardar si hay cambios). |
Ctrl + W |
Buscar texto | Busca una palabra o frase en el archivo. |
Ctrl + K |
Cortar línea | Elimina la línea actual y la guarda temporalmente. |
Ctrl + U |
Pegar línea | Pega la línea cortada o copiada. |
Ctrl + C |
Mostrar posición | Muestra el número de línea y columna. |
Ctrl + G |
Ayuda | Abre la guía rápida de comandos. |
4.2.1 Ejercicio 2: Creación de un archivo de texto
Para el siguiente ejercicio utilizaremos un fragmento del libro “Cien años de soledad” escrito García Marquez (1967):
Copiemos y peguemos el fragmento del libro en fragmento.txt que abrimos con nano. Puedes pegar texto:
Haciendo clic derecho
Ctrl + v # windowsCmd + v # windows
Para desplazarte desplazarte en el editor puedes utilizar las flechas de tu teclado: → hacia la derecha, ← hacia la izquierda, ↑ hacia arriba y ↓ hacia abajo.
Guarda el archivo Ctrl + O y para confirmar los cambios presiona Enter
Para salir del editor presiona Ctrl + X
Una vez que tenemos un archivo de texto, el siguiente paso es aprender a explorarlo desde la terminal.
La mayoría de los análisis en Bash comienzan revisando información básica del archivo: cuántas líneas tiene, cuántas palabras contiene, cómo luce su comienzo o su final, etc.
Aunque podríamos abrir el archivo en un editor cada vez que queramos revisarlo, la terminal ofrece herramientas mucho más rápidas y eficientes para obtener esta información. Estas herramientas no modifican el archivo, solo muestran datos sobre él.
Para lograr esto, Bash incluye utilidades como:
wc- permite contar caracteres, palabras y líneas.
head- muestra el inicio de un archivo.
tail- muestra el final del archivo.
Para fragmento.txt qué línea de comando utilizarías para…
Contar solamente el número de caracteres
Contar solamente el número de palabras
Contar solamente el número de renglones
Muestra las primeras seis líneas
Muestra las úlimas siete líneas
4.3 Búsqueda de patrones en un archivo (wild cards *[]?)
Los wildcards o wild characters son símbolos utilizados para representar uno o más caracteres. Se pueden utilizar con otros comandos para facilitar el procesamiento o búsqueda de archivos, directorios y datos en general.
| Wildcard | Función |
|---|---|
* |
Coincide con cualquier cantidad de caracteres |
? |
Coincide con un solo caracter |
[ ] |
Coincide con un conjunto o rango de caracteres |
El wildcard más usado es * porque es muy versátil.
Además de contar líneas, palabras o caracteres, muchas veces queremos buscar si cierta palabra o frase aparece dentro de un archivo de texto.
El comando grep sirve para buscar patrones de texto dentro de uno o varios archivos y mostrar las líneas donde aparece ese patrón.
Las wildcards buscan patrones en nombres de archivos, mientras que grep busca patrones dentro del contenido de los archivos.
Para el siguiente ejercicio puedes utilizar el comando grep con distintas opciones
sin argumentos: Muestra las líneas en donde encontró las coincidencias-c: En lugar de mostrar las líneas, cuenta cuantas coincidencias hay-v: Muestra las líneas que no contienen el patrón “---”-i: Ignora mayúsulas y minúsculas
Muestra las líneas donde aparece la palabra “Aureliano”. ¿Qué ocurre si en vez de escribir “Aureliano” escribes “aureliano”? ¿Hay alguna manera de buscar ignorando Mayúsculas/minúsculas?
Muestra las líneas que no contienen la palabra “aldea”
Guarda en un archivo todas las líneas que tengan la palabra “pirata”
¿Qué hará el siguiente comando?
grep "[A-Z]" *.txtMuestra las líneas que NO tengan letras mayúscula
4.4 Uso de pipes (|) para combinar comandos y operadores
Los pipes permiten encadenar estos comandos para crear un flujo de trabajo donde la salida de un comando pasa directamente a ser la entrada del siguiente. El símbolo | se conoce como pipe.
Los pipes permiten:
- procesar información sin crear archivos intermedios
- combinar comandos simples para realizar tareas más complejas
- trabajar de manera eficiente con archivos grandes
- construir flujos de análisis paso a paso
Los corchetes [] se usan para buscar coincidencias específicas con conjunto o un rango de caracteres válidos para una posición.
¿Qué hará la siguiente línea de comando?
grep "años" fragmento.txt | wc -lEscribe una línea de comando que muestre las 3 primeras líneas que contienen la palabra “años”
¿Qué hará el siguiente comando?
grep "[A-Z]" fragmento.txtEscribe una línea de comando que muestre las líneas que NO tengan letras mayúscula
4.5 Uso de expresiones regulares
Las expresiones regulares (regex) permiten buscar patrones más precisos dentro del texto. A diferencia de los comodines del shell (como *, ?, []), las expresiones regulares son interpretadas por comandos como grep y se aplican sobre el contenido de un archivo, no sobre los nombres de archivo.
Aunque existen expresiones regulares muy complejas, podemos comenzar con algunas básicas que son muy útiles en análisis de texto:
^marca el inicio de una línea$marca el final de una línea.coincide con cualquier carácter
¿Qué harán las siguientes líneas de comando?
grep -i "^e" fragmento.txtgrep -i "\.$" fragmento.txtgrep "[0-9]" fragmento.txt
4.6 Lista de comandos importantes
4.6.1 Crear, copiar, mover y eliminar
Comandos que modifican la estructura de directorios y archivos
| Comando | Descripción | Ejemplo |
|---|---|---|
mkdir |
Crea un nuevo directorio | mkdir resultados |
touch |
Crea un archivo vacío | touch notas.txt |
cp |
Copia archivos o directorios | cp archivo.txt copia.txt |
mv |
Mueve o renombra archivos | mv datos.csv directorio/ |
rm |
Elimina archivos | rm archivo.txt |
rmdir |
Elimina directorios vacíos | rmdir vieja/ |
4.6.2 Editores de archivos
Estos editores permiten crear o modificar archivos directamente desde la terminal, especialmente útil al trabajar en servidores remotos o sin entorno gráfico.
| Comando | Descripción | Ejemplo |
|---|---|---|
nano |
Editor sencillo y fácil de usar; guarda con Ctrl+O y cierra con Ctrl+X el archivo | nano script.sh |
vim |
Editor avanzado con control mediante comandos; guarda con :w y sale con :q |
vim script.sh |
4.6.3 Exploración de archivos
Comandos para inspeccionar lo que hay dentro de los archivos sin abrirlos en un editor
| Comando | Descripción | Ejemplo |
|---|---|---|
cat |
Muestra el contenido completo | cat notas.txt |
head |
Muestra las primeras líneas | head -n 10 datos.csv |
tail |
Muestra las últimas líneas | tail -n 20 registro.log |
less |
Muestra el contenido paginado | less texto.txt |
4.6.4 Buscar y filtrar
Comandos para localizar texto o patrones dentro de archivos o directorios
| Comando | Descripción | Ejemplo |
|---|---|---|
grep |
Busca texto dentro de archivos | grep "error" log.txt |
find |
Busca archivos según criterios | find . -name "*.txt" |
wc |
Cuenta líneas, palabras o caracteres | wc -l datos.txt |
4.6.5 Redirección y concatenación
Comandos para conectar procesos o guardar salidas
| Comando | Descripción | Ejemplo |
|---|---|---|
> |
Redirige la salida a un archivo | ls > lista.txt |
>> |
Agrega la salida al final del archivo existente | echo "nuevo" >> lista.txt |
< |
Usa un archivo como entrada de un comando | sort < datos.txt |
| |
Conecta la salida de un comando con la entrada de otro | cat datos.txt | grep "gene" |
4.7 Referencias
- García Márquez, G. (1967). Cien años de soledad. Sudamericana.
- Biblioteca Nacional de España. (25/04/2014). Fragmentos de obras [PDF]. https://www.bne.es/sites/default/files/repositorio-archivos/Fragmentos_de_obras.pdf