Напишите скрипт, который выводит имя файла и номер белья, которые содержат определенный текст

Как я могу написать (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 символов.

Другие вопросы по тегам