grep pode fazer isso sozinho, você pode envolvê-lo em um script, se necessário:
grep -nr '\todo' *.tex
-r para recursivo
-n para exibir o número da linha no arquivo
Por padrão, o grep mostrará a linha que contém a correspondência. Para alguns formatos, isso pode significar muita saída. Se você quiser restringir a saída para obter apenas a correspondência e alguns caracteres de cada lado, use:
egrep -nor '.{0,20}\todo.{0,20}' *.tex
O -o significa "exibir somente o resultado correspondente", no entanto, isso exibiria apenas \todo . Para obter algum contexto, permitimos qualquer número de caracteres até 20 em ambos os lados da partida. O . corresponde a qualquer coisa e o {0,20} repete este jogo até 20 caracteres.