Я рекурсивно ищу каталог, используя grep со следующими аргументами, надеясь вернуть только первое совпадение. К сожалению, он возвращает больше, чем один - фактически два раза, когда я смотрел в последний раз. Кажется, у меня слишком много аргументов, особенно без желаемого результата. : - /
# grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/directory
возвращает:
Pulsanti Operietur
Pulsanti Operietur
Может быть, grep не лучший способ сделать это? Вы говорите мне, большое спасибо.
-r
очевидно), но они не должны причинять боль (я бы не использовал-a
)grep -m 1
возвратил оба экземпляра из-за этого.|head -1
решил это!first not first from result
. Этот ответ печатает первое совпадение в любом файле и останавливается. Что еще ты ожидал?Вы можете передать
grep
результатhead
в сочетании с stdbuf .Обратите внимание, что для того, чтобы обеспечить остановку после N-го совпадения, вам нужно использовать,
stdbuf
чтобы убедиться,grep
что не буферизируют его вывод:Как только
head
потребляет 1 строку, он завершается иgrep
получит,SIGPIPE
потому что он все еще выводит что-то в трубу, покаhead
пропало.Предполагалось, что имена файлов не содержат символ новой строки.
источник
xargs
:find . -name '*.gz' | xargs -I '{}' stdbuf -oL zgrep -al 'pattern' {} | head -n 1
. Это, однако, не заканчивается в первом матче. Любой совет?grep
«s--line-buffered
опция предотвращает буфер накладных расходов , не вызывая дополнительную утилиту?В моей программе grep-a-like
ack
есть-1
опция, которая останавливается на первом найденном совпадении. Он поддерживает то, на-m 1
что ссылается @mvp. Я вставил это туда, потому что, если я ищу большое дерево исходного кода, чтобы найти что-то, что, как я знаю, существует только в одном файле, нет необходимости его искать и нужно нажать Ctrl-C.источник
ag
может быть быстрым, но это не имеет-1
вариант , который полезен в данном случаеВы можете использовать команду ниже, если вы хотите напечатать всю строку и имя файла, если вхождение определенного слова в текущем каталоге вы ищете.
источник
Единственный лайнер, используя
find
:источник
grep -r
работает намного быстрее - это только одна копия, которая выполняет обратный путь в каталогах.