
Как написать (bash)-скрипт, который сканирует все файлы .tex в папке на наличие \todo
и выводит имя файла и номер строки, где он встречается?
Что я получил на данный момент:
#!/bin/bash
for texfile in *.tex ; do
**Scan for \todo**
**output $textfile$ , linenumber**
done
Я хочу быть уверен, что мои файлы .tex не содержат \todo{sometext}
.
Это не обязательно должен быть bash, я выбрал его только для простоты. Grep и т. д., безусловно, были бы приветствуемы.
решение1
grep
может сделать это самостоятельно, вы можете обернуть это в скрипт, если необходимо:
grep -nr '\todo' *.tex
-r
для рекурсивного
-n
отображения номера строки в файле
По умолчанию grep покажет строку, содержащую совпадение. Для некоторых форматов это может означать большой объем вывода. Если вы хотите ограничить вывод, чтобы получить только совпадение и несколько символов с каждой стороны, используйте это:
egrep -nor '.{0,20}\\todo.{0,20}' *.tex
Означает -o
«отображать только совпадающий результат», однако, тогда это просто отобразит \todo
. Чтобы получить некоторый контекст, мы допускаем любое количество символов до 20 с каждой стороны совпадения. Соответствует .
чему угодно, а {0,20}
повторяет это совпадение до 20 символов.