2015-10-22 2 views
1

У меня есть странная проблема на FreeBSD 8.4-STABLE с grep (GNU grep) 2.5.1-FreeBSD.GNU grep на FreeBSD не работает должным образом

Если я пытаюсь установить grep -Hnr searchstring, я не получил никакого вывода, но grep запускает указанный ps aux и продолжает работать, пока не убью процесс.

Если я скопировать TestFile в пустой каталог и сделать

cat testfile | grep searchstring это работает.

Но если я пытаюсь использовать grep -Hnr searchstring в этом каталоге, я также не получаю выход, grep продолжает работать и работает, но не дал никаких совпадений.

Кто-нибудь знает, как это решить?

ответ

4

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

Вы хотите

grep -Hnr searchstring . 
# ....................^^ 

Это будет рекурсивно найти файлы в текущем каталоге.

+0

Ах спасибо, в системах, где я уже использовал этот шаблон, он как-то работает без точки. Но он работает, как вы сказали, спасибо. – mstruebing

+1

GNU grep версии 2.11+ предположим '.', когда' -r' используется без каких-либо аргументов. См. Раздел «Новые функции» [здесь] (http://lists.gnu.org/archive/html/info-gnu/2012-03/msg00000.html). Я бы предположил, что ОП привык к этому, не осознавая этого. –

1

Хотя это, кажется, не быть документировано, если вы вызываете grep с -r опции и без каких-либо файлов или каталогов аргументов имени, то по умолчанию в текущий каталог, почти как если бы вы ввели grep -R pattern . за исключением того, что ./ не появляется на выходе.

Видимо, это довольно новая функция.

Если вы делаете рекурсивный grep в каталоге с большим количеством содержимого, это может занять много времени - возможно, навсегда, если есть файлы устройств, такие как /dev/zero, которые могут создавать бесконечный вывод.

Смежные вопросы