Escreva um script que produza nome de arquivo e número de linha que contenha determinado texto

Escreva um script que produza nome de arquivo e número de linha que contenha determinado texto

Como posso escrever um script (bash) que verifica todos os arquivos .tex em uma pasta em busca de ocorrência de \todoe 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

greppode fazer isso sozinho, você pode envolvê-lo em um script, se necessário:

grep -nr '\todo' *.tex

-rpara recursivo -nexibir 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 -omeio "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.

informação relacionada