
Como posso escrever um script (bash) que verifica todos os arquivos .tex em uma pasta em busca de ocorrência de \todo
e gera o nome do arquivo e o número da linha onde ele ocorre?
O que consegui até agora:
#!/bin/bash
for texfile in *.tex ; do
**Scan for \todo**
**output $textfile$ , linenumber**
done
Quero ter certeza de que meus arquivos .tex não contenham \todo{sometext}
quando eu os entregar.
Não precisa ser bash, só escolhi isso pela simplicidade. Grep etc certamente seria bem-vindo.
Responder1
grep
pode fazer isso sozinho, você pode envolvê-lo em um script, se necessário:
grep -nr '\todo' *.tex
-r
para recursivo
-n
exibir o número da linha no arquivo
Por padrã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 isto:
egrep -nor '.{0,20}\\todo.{0,20}' *.tex
O -o
meio "exibir apenas o resultado correspondente", no entanto, isso seria apenas exibido \todo
. Para obter algum contexto, permitimos qualquer número de caracteres até 20 em cada lado da partida. Corresponde a .
qualquer coisa e {0,20}
repete essa correspondência em até 20 caracteres.