Dove cerca grep -r per impostazione predefinita?


16

Ho scoperto che se cercavo usando grep senza specificare un percorso, come grep -r 'mytext'se impiegasse infinitamente tempo. Nel frattempo, se cerco con il percorso specificato grep -r 'mytext' ., trova immediatamente ciò di cui ho bisogno. Quindi, sono curioso, in prima forma, in quale directory cerca grep?

UDATE: versione grep: grep (GNU grep) 2.10


3
Prova a digitare via, scrivi foomytextbar(seguito da Invio) dopo l'esecuzione grep -r 'mytext'.
sr_

2
Forse dovresti specificare di che re grepè. Con GNU grepuso su Linux grep -r 'mytext'e faccio grep -r 'mytext' .la stessa cosa: cerca ricorsivamente partendo dalla directory corrente. Quando -rsi utilizza lo switch GNU grep non cerca STDIN.
arte

2
Ah. Ho provato con grep2.12: pastebin.com/L4my26QS Nel frattempo ho trovato questo nel file NEWS relativo alla versione 2.11 (2012-03-02): "Se non viene fornito alcun operando di file e viene fornita un'opzione da riga -r o equivalente , grep cerca ora la directory di lavoro. Precedentemente grep ha ignorato -r e ha cercato l'input standard in modo non ricorsivo. Un -r trovato in GREP_OPTIONS non ha questo nuovo effetto. "
arte

3
Recentemente GNU grep ha modificato il comportamento con l'argomento -r (consultare il commit ). Quindi "grep -r PATTERN" con grep più recente cercherà la directory corrente e non STDIN.
hluk,

2
@Mikel, ho aggiornato la mia domanda con una versione grep. Sembra che la risposta che ho indicato come corretta sia effettivamente una risposta corretta, perché sto usando un grep "vecchio". Quindi non importa se specifico -r oppure no, se non viene fornita alcuna directory, cerca in STDIN. A proposito, grazie per quell'indagine, ora, sarò consapevole dei futuri cambiamenti in grep;)

Risposte:


24

In realtà non cerca da nessuna parte. Attende input da input standard.

Prova questo:

beast:~ viroos$ grep foo

quando si digita una riga contenente "pippo" e si preme invio, questa riga verrà ripetuta, altrimenti il ​​cursore verrà spostato su una nuova riga ma grep non stamperà nulla.


6
Come ho commentato sopra grep -r PATTERNcon la versione più recente di GNU grep non leggerà l'input standard ma cercherà il pattern nella directory corrente (vedi il commit ). Questa modifica ha senso poiché probabilmente non si desidera cercare l'input standard quando si specifica -rflag.
hluk,

Ho controllato la mia versione grep, è 2.10, quindi questa risposta è perfettamente pertinente. A proposito, ora saprò cosa aspettare dalle nuove versioni di grep.

3

Esattamente come dice la precedente risposta di Maciek:

In realtà non cerca da nessuna parte. Attende input da input standard.

Tuttavia, puoi scrivere nello stdin di un programma già in esecuzione se hai / proc disponibile eseguendo il piping dei dati nel suo primo descrittore:

In una corsa terminale

grep "hello"

e vederlo attendere indefinitamente ... In un altro terminale digitare questo:

echo "hello $USER" > /proc/`pgrep grep`/fd/0

vedi il primo terminale stampa ciao e il tuo nome utente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.