/ / Cosa fa grep quando non viene aggiunta una directory o un file - bash, grep

Cosa fa grep quando non viene aggiunta una directory o un file - bash, grep

Ultimamente ho usato il comando egrep (solo per preferenza rispetto a grep) e ho notato un comportamento che non capisco del tutto. Quando eseguo il seguente comando nella mia directory home: egrep -r "main" * fa quello che mi aspetto e restituisce tutte le righe e i rispettivi file che contengono "main".

Anche se inserisco: egrep -r "main" e dimentica di mettere la stella alla fine, sembra appendere per sempre. Spero che qualcuno possa essere in grado di far luce sul perché questo è e cosa sta facendo?

Grazie :)

risposte:

5 per risposta № 1

Sta aspettando un input da stdin perché non hai specificato un nome file, da grep pagina di manuale:

NAME
grep, egrep, fgrep - print lines matching a pattern

SYNOPSIS
grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION
Grep searches the named input FILEs (or standard input if no files are named, or the file name - is given) for lines containing a match to the given PATTERN.  By default, grep
prints the matching lines.

4 per risposta № 2

grep (o egrep) ha bisogno di sapere quali file cercare. Includendo il *, gli stai dicendo di cercare in tutti i file nella directory corrente.

Se non includi il file *, non sa dove cercare, quindi attende il tuo input e ti chiederà input per la ricerca (digitalo, quindi premi ctrl + d per terminare la modalità di input standard).

Questo comportamento non è unico per grep. Qualsiasi comando che richiede input vuole che l'input provenga da un file o da input standard (stdin).

i dati stdin possono provenire da una pipe o possono esseredigitato manualmente al prompt dopo aver inserito il comando (che è quello che stavi vedendo quando pensavi che fosse bloccato). Come ho già detto, premendo Ctrl + D uscirai da quella modalità di input.


3 per risposta № 3

Non hai fornito il percorso quindi grep aspetta stdin per i dati.

Esempio con percorso:

egrep -r "pattern" . <- cerca nella directory e nelle sottodirectory correnti

cat file | egrep "pattern" <- cerca nei dati dalla pipe