Voglio cercare una stringa di testo in tutti i file in una directory (e non nelle sue sottodirectory; so che l' -r
opzione lo fa, ma non è quello che voglio).
In esecuzione
grep "string" /path/to/dir
dovrebbe essere in grado di farlo, ho letto, ma mi dà l'errore:
grep: dir: è una directory
Successivamente, ho provato a correre
grep
su più file.grep "string" .bashrc .bash_aliases
funziona perfettamente.grep "string" .bash*
funziona anche come previsto.grep "string" *
mi dà gli errori:grep: data: Is a directory grep: Desktop: Is a directory grep: Documents: Is a directory grep: Downloads: Is a directory ...
Vengono stampati solo gli errori, non visualizzo le righe corrispondenti. Ho provato a usare l' -s
opzione, ma senza risultati.
Quindi, le mie domande:
Perché non riesco a utilizzare
grep
una directory, come in (1), quando dovrei essere in grado di farlo? L'ho visto fatto in molti esempi su Internet.
Modifica : quando dico "usando grep su una directory", intendo "cerca in tutti i file in quella directory escludendo le sue sottodirectory". Credo che questo sia ciò che Grep fa quando gli passi una directory al posto di un file. Sono errato?Per favore, mi dia una spiegazione sul funzionamento
grep
che spiegherebbe il comportamento dei comandi in (2).
Modifica : lasciami essere più specifico. Perché usare i caratteri jolly per specificare più file in cui cercare il lavoro con.bash*
e non con*
o addirittura./*
?Come posso cercare tutti i file in una directory (e non nelle sue sottodirectory) usando
grep
?
grep "string" .bash*
anche con .
grep "string" * .* 2>/dev/null
oppuregrep -s "string" * .*
*
, noto come globbing. Globbing non include i nomi di file che iniziano con un punto.bashrc
come standard. Puoi impostare le opzioni della shell in modo che includano questi file, ma puoi metterti in un pasticcio se non sai cosa stai facendo. Una buona guida per comprendere il globing può essere trovata qui mywiki.wooledge.org/glob