Risposte:
alias cgrep='grep -nR --color'
Uso:
$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card
Anche uno dei miei preferiti:
$ pgrep some-hanging-process
elencherà tutti i pid di processi che corrispondono al nome di alcuni processi sospesi che è possibile utilizzare nella seguente situazione:
$ kill $(pgrep some-hanging-process)
grep
, in grep -r
genere dovrebbe essere preferito rispetto grep -R
al primo perché non attraversa i collegamenti simbolici.
Ho scoperto che il modo migliore per fare il magnaccia grep è usare ack , che è essenzialmente grep ricorsivo con un elenco di ignori intelligente (ad esempio, non cerca directory .svn, ignora i file di backup, ecc.), L'evidenziazione dei colori dei risultati e perl regexps. È quello che vuoi che grep faccia il 98,6% delle volte.
Ho impostato questo nel mio .bashrc, invece di ridefinire grep usando un alias:
export GREP_OPTIONS="--color=auto"
Per me, questo funziona su Linux, MacOSX e FreeBSD.
GREP_OPTIONS
dovrebbe essere considerato dannoso. Consiglio alias
invece di usare . Vedi qui: bugs.launchpad.net/ubuntu/+bug/67141
Consiglierei di evitare la variabile d'ambiente GREP_OPTIONS, influenzerà ogni invocazione di grep, anche quelle incorporate in altri strumenti. Se quegli strumenti si aspettano che grep si comporti in un modo, e tu cambi quel comportamento, lo farà e romperà quegli strumenti.
Invece, puoi creare un alias, che funziona bene. Questo influenzerà solo le chiamate a grep dalla tua shell interattiva (cioè che digiti te stesso).
L'ultima opzione, che mi piace soprattutto, è quella di creare uno script wrapper che invochi grep. Preferisco questo rispetto ad un alias, perché posso invocare questo wrapper da altri programmi. Ad esempio in vim impostando vimgrep, in modo che le mie ricerche all'interno di vim si comportino in modo identico alle ricerche sulla riga di comando.
$ cat `which grp`
#!/usr/bin/env bash
grep -rI --color --exclude-dir=\.bzr --exclude-dir=\.git --exclude-dir=\.hg --exclude-dir=\.svn --exclude-dir=build --exclude-dir=dist --exclude=tags $*
Richiamalo usando:
$ grp pattern dir
per esempio
$ grp pattern .
cercherà le istanze di 'pattern' in tutti i file di testo nella directory e nei sottodir correnti.
Notate che chiamo il mio script 'grp', anziché oscurare 'grep', in modo da essere sempre consapevole del fatto che sto invocando grep con i miei valori predefiniti personalizzati o meno.
Per impostazione predefinita includo:
-r : search subdirs recursive
-I : skip binary files
--color : highlight matches in color
--exclude-dir : skip specified directories and their subdirs
--exclude : skip specified files
Penso che tutti vorrebbero saltare le dirs di controllo del codice sorgente: .hg .git .bzr .svn
Saltare 'build' e 'dist' sono python-ismi e probabilmente non si applicano alla maggior parte delle persone. Senza dubbio svilupperai le tue idiosincrasie mentre lavori.
'tags' è l'output di ctags, che uso per 'vai alla definizione della funzione' e simili in strumenti come vim. Come tale contiene almeno una copia di ogni parola e simbolo dal mio codice sorgente, quindi vale la pena saltare dai risultati della ricerca.
"$ *" alla fine è la sintassi bash per "e tutti gli altri parametri dalla riga di comando", quindi puoi passare il modello e la directory per cercare normalmente e sovrascrivere qualsiasi altro flag della riga di comando che desideri .
L' --color
opzione è stata già menzionata più volte, ma vorrei aggiungere che è possibile configurare il colore con cui verranno evidenziate le corrispondenze utilizzando una variabile di ambiente
export GREP_COLOR="1;33"
Il colore deve essere codificato utilizzando i codici colore ANSI, come riferimento
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
GREP_COLOR
è deprecato. Usa GREP_COLORS
invece.
Dal momento che non ho visto alcun esempio di impostazione dei colori, ecco una semplice configurazione per GNU grep:
# turn on colors, natch.
export GREP_OPTIONS="--color=auto"
if [[ $(echotc Co) -ge 256 ]]; then
# 256 color terminals
export GREP_COLORS="mt=38;5;118:sl=:cx=:fn=38;5;18:ln=1;30:bn=37:se=30"
else
# everybody else
export GREP_COLORS="mt=31:sl=:cx=:fn=34:ln=1;30:bn=30:se=30"
fi
Stai attento GREP_OPTIONS
; non usarlo per nient'altro che cose del genere --color=auto
o rovinerà qualsiasi script che utilizza grep sul tuo sistema.