Напишите скрипт, который выводит имя файла и номер белья, которые содержат определенный текст
Как я могу написать (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 символов.