Чому саме "ключове слово grep" змушує термінал постійно стояти?


25

Коли я набираю "grep doc" в терміналі, він просто нічого не робить, не зупиняючи термінала робити нічого іншого, перш ніж я втечу, використовуючи Ctrl+ Cабо Z.

Я знаю, що це не те, як я повинен використовувати греп, а просто цікаво, чому це відбувається.

Відповіді:


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 на рядку самостійно, щоб закінчити греп "сеанс".
Кевін

2
Гарна відповідь. Просто хотілося б відзначити , що в значній мірі ніхто ніколи НЕ повинен використовувати Grep шляхом введення , як це, але це дозволяє труби стандартний висновок з попередньої команди, яка є дуже корисним.
Карл Білефельдт

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

1
@NateEldredge: Дякуємо за те, що ви надали практичний приклад для цього! Я завжди дивився на нульові аргументи викликів таких речей, як греп і кіт, як на теоретичні.
лабіринт

1
@labyrinth Вони взагалі не теоретичні, вони використовуються весь час при трубопроводах, наприкладsomecommand | grep foo
Barmar

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.