
¿Cómo puedo escribir un script (bash) que escanee todos los archivos .tex en una carpeta para detectar la aparición de \todo
y genere el nombre del archivo y el número de línea donde ocurre?
Lo que tengo hasta ahora:
#!/bin/bash
for texfile in *.tex ; do
**Scan for \todo**
**output $textfile$ , linenumber**
done
Quiero estar seguro de que mis archivos .tex no contengan contenido \todo{sometext}
cuando los entregue.
No tiene que ser bash, solo lo elegí por simplicidad. Grep, etc., sin duda serían bienvenidos.
Respuesta1
grep
Puede hacer esto por sí solo, puede incluirlo en un script si es necesario:
grep -nr '\todo' *.tex
-r
para recursivo
-n
para mostrar el número de línea en el archivo
De forma predeterminada, grep mostrará la línea que contiene la coincidencia. Para algunos formatos, esto puede significar una gran cantidad de resultados. Si desea restringir la salida para que solo obtenga la coincidencia y algunos caracteres en cada lado, use esto:
egrep -nor '.{0,20}\\todo.{0,20}' *.tex
Significa -o
"mostrar solo el resultado coincidente", sin embargo, esto solo mostraría \todo
. Para tener algo de contexto, permitimos cualquier número de personajes hasta 20 en cada lado de la partida. Coincide .
con cualquier cosa y {0,20}
repite esta coincidencia hasta 20 caracteres.