2

Как я могу написать (bash) скрипт, который сканирует все файлы .tex в папке на наличие \todo и выводит имя файла и номер белья, где это происходит?

Что я получил так далеко:

#!/bin/bash
for texfile in *.tex ; do
  **Scan for \todo**
  **output $textfile$ , linenumber**
done

Я хочу быть уверен, что мои .tex файлы не содержат \todo{sometext} когда я их доставляю.

Это не должно быть bash, я выбрал это только для простоты. Grep и т.д., Безусловно, приветствуются.

1 ответ1

4

grep может сделать это самостоятельно, при необходимости вы можете обернуть его в скрипт:

grep -nr '\todo' *.tex

-r для рекурсивного -n для отображения номера строки в файле

По умолчанию grep покажет строку, содержащую совпадение. Для некоторых форматов это может означать много выходных данных. Если вы хотите ограничить вывод, чтобы получить только совпадение и несколько символов с каждой стороны, используйте это:

egrep -nor '.{0,20}\\todo.{0,20}'  *.tex

Параметр -o означает "только отображать результаты сопоставления", однако тогда он просто отображает \todo . Чтобы получить некоторый контекст, мы разрешаем любое количество символов до 20 на каждой стороне матча. . соответствует чему угодно, и {0,20} повторяет это совпадение до 20 символов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .