Escriba un script que genere un nombre de archivo y un número de línea que contenga cierto texto

Escriba un script que genere un nombre de archivo y un número de línea que contenga cierto texto

¿Cómo puedo escribir un script (bash) que escanee todos los archivos .tex en una carpeta para detectar la aparición de \todoy 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

grepPuede hacer esto por sí solo, puede incluirlo en un script si es necesario:

grep -nr '\todo' *.tex

-rpara recursivo -npara 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.

información relacionada