Поиск по сайту:

Как использовать grep для отображения имен файлов и номеров строк перед сопоставлением строк


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

Отображение имен файлов с помощью grep

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

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

Простое исправление заключается в использовании флага -H в верхнем регистре, который действует противоположно -h и всегда включает имена файлов независимо от того, что происходит. , даже если в качестве входных данных передан только один файл.

grep -H "foo" file

Флаг -H имеет еще один неожиданный, но полезный эффект: в сочетании с входными данными из stdin, такими как конвейеры Unix, он напечатает (стандартный ввод): вместо имени файла.

Отображение номеров строк с помощью grep

Вы также можете использовать его в сочетании с флагом -n, чтобы получить номер строки:

grep -Hn "foo"

POSIX-совместимый хак

Флаг -H в grep несовместим с POSIX и недоступен в некоторых малоизвестных операционных системах на основе Unix. К счастью, есть хак, который вы можете использовать, передав /dev/null как фальшивый ввод второго файла в grep, который обманывает его, заставляя думать, что существует несколько файлов: