🐧 Как вывести первое совпадение и остановить grep

by itisgood

grep – это утилита Linux, используемая для поиска совпадений в содержимом.

По умолчанию она выводит все совпадающие строки, что может формировать большое количество вывода.

Если вас интересует только первое совпадение, вы можете ограничить вывод только первой строкой.

Ограничение вывода с помощью grep -m

Команда grep имеет параметр -m или –max-count, который может решить эту проблему, но он может сработать не так, как вы ожидаете.

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

Мы можем проверить это с помощью флага -n, чтобы вывести номера строк.

grep -m 1 "foo" file

Однако это имеет некоторые недостатки, о которых вы должны знать.

Он останавливается не после N совпадений, а после N строк.

Это приведет к тому, что grep будет искать совпадения несколько раз в каждой строке, что может стать проблемой при использовании флага -o, который выводит каждое совпадение на новой строке.

Кроме того, на один файл приходится только N строк, поэтому при использовании для нескольких файлов будет выведена первая совпадающая строка для каждого файла.

Использование head для ограничения вывода grep

Альтернативой является передача вывода в другую команду, head, которая просто отсекает ввод после N строк.

Тем не менее, использовать -m 1 с grep все же полезно, так как он прекратит обработку больших файлов, если совпадение будет найдено раньше.

grep "foo" file_one.txt | head -1

Это работает с флагом -o для печати только первого совпадения, даже если в файле есть несколько совпадений:

Однако будьте осторожны при использовании этой функции с несколькими файлами.

При использовании head будет выведена первая совпавшая строка в любом файле.

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

Аналогично, вы также можете использовать tail для вывода последней совпадающей строки.

см. также:

 

You may also like

Leave a Comment