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

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

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

Связанный контент