Почему «ключевое слово grep» приводит к тому, что терминал всегда стоит на месте?


25

Когда я набираю «grep doc» в терминале, он просто ничего не делает, мешая терминалу делать что-либо еще, прежде чем я уйду с помощью Ctrl+ Cили Z.

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

Ответы:


40

grep по умолчанию ищет стандартный ввод, если файлы не заданы:

grep ищет в именованных входных ФАЙЛАХ (или в стандартном вводе, если файлы не названы, или если в качестве имени файла указан один дефис-минус (-)) строки, содержащие совпадение с заданным ШАБЛОНОМ. По умолчанию grep печатает совпадающие строки.

Если вы просто делаете grep docGrep ожидает стандартный ввод , чтобы прийти и поиск внутри него (не входят части между <и >в терминал, эти комментарии):

$ grep doc
a b c <PRESS ENTER HERE>
doc <NO MATCH WAS FOUND IN PREVIOUS LINE, TYPE doc AND PRESS ENTER AGAIN>
doc <MATCH WAS FOUND>

6
OP может также нажать Ctrl + D на строке, чтобы завершить "сеанс" grep.
Кевин

2
Хороший ответ. Просто хотелось бы отметить , что в значительной степени никто никогда не должен использовать Grep путем ввода , как это, но это позволяет трубы стандартный вывод из предыдущей команды, которая является очень полезным.
Карл Билефельдт

20
@KarlBielefeldt: На самом деле это удобный способ отладки сложных регулярных выражений. Вы можете запустить что-то вроде grep '([a-z]+[0-9]*.x){2,3}'и набрать на клавиатуре несколько строк сэмплов, чтобы убедиться, что они соответствуют тому, что вы думаете. Линии, которые соответствуют, будут отражены, линии, которые не будут.
Нейт Элдридж

1
@NateEldredge: Спасибо за практический пример для этого! Я всегда рассматривал пустые вызовы таких вещей, как grep и cat, в основном как теоретические.
Лабиринт

1
@labyrinth Они вовсе не теоретические, они все время используются при somecommand | grep foo
прокачке

14

grep ждет ввода.

От man grep:

[...]
DESCRIPTION
       grep  searches  the named input FILEs (or standard input if no files are named
[...]
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.