Escreva um script que produza nome de arquivo e linenumber que contenha determinado texto

2

Como posso escrever um script (bash) que varre todos os arquivos .tex em uma pasta para a ocorrência de \todo e gera o nome de arquivo e o linenumber onde ocorre?

O que eu tenho 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 contêm \todo{sometext} quando os entrego.

Não precisa ser bash, só escolhi isso por simplicidade. Grep etc seria certamente bem-vindo.

    
por bjornasm 07.06.2015 / 15:52

1 resposta

4

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.

    
por 07.06.2015 / 16:04

Tags