Réponses:
alias cgrep='grep -nR --color'
Usage:
$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card
Aussi l'un de mes favoris:
$ pgrep some-hanging-process
listera tous les pids des processus qui correspondent au nom de certains processus suspendus que vous pouvez utiliser dans la situation suivante:
$ kill $(pgrep some-hanging-process)
grep
, grep -r
devrait généralement être préféré grep -R
car le premier ne traverse pas les liens symboliques.
J'ai trouvé que la meilleure façon de pimp grep est d'utiliser ack , qui est essentiellement grep récursif avec une liste d'ignorance intelligente (par exemple, ne recherche pas les répertoires .svn, ignore les fichiers de sauvegarde, etc.), la coloration des résultats et perl regexps. C'est ce que vous voulez que grep fasse 98,6% du temps.
J'ai défini cela dans mon .bashrc, au lieu de redéfinir grep en utilisant un alias:
export GREP_OPTIONS="--color=auto"
Pour moi, cela fonctionne sur Linux, MacOSX et FreeBSD.
GREP_OPTIONS
devrait être considérée comme nuisible. Je recommande d'utiliser à la alias
place. Voir ici: bugs.launchpad.net/ubuntu/+bug/67141
Je recommanderais d'éviter la variable d'environnement GREP_OPTIONS, cela affectera chaque appel de grep, même ceux intégrés dans d'autres outils. Si ces outils s'attendent à ce que grep se comporte dans un sens, et que vous modifiez ce comportement, il cassera et cassera ces outils.
Au lieu de cela, vous pouvez créer un alias, qui fonctionne bien. Cela n'affectera que les appels à grep depuis votre shell interactif (c'est-à-dire que vous vous tapez).
La dernière option, que j'aime le plus, est de créer un script wrapper qui invoque grep. Je préfère cela à un alias, car je peux invoquer ce wrapper à partir d'autres programmes. Par exemple, dans vim en définissant vimgrep, de sorte que mes recherches à partir de vim se comportent de manière identique aux recherches sur la ligne de commande.
$ 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 $*
Appelez ceci en utilisant:
$ grp pattern dir
par exemple
$ grp pattern .
recherchera les instances de 'pattern' dans tous les fichiers texte du répertoire et des sous-répertoires actuels.
Notez que j'appelle mon script «grp», plutôt que de suivre «grep», afin que je sache toujours si j'appelle grep avec mes valeurs par défaut personnalisées ou non.
Par défaut j'inclus:
-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
Je pense que tout le monde voudrait ignorer les répertoires de contrôle de source: .hg .git .bzr .svn
Ignorer 'build' et 'dist' sont des ismes Python, et ne s'appliquent probablement pas à la plupart des gens. Vous développerez sans aucun doute vos propres idiosyncrasies pendant que vous travaillez.
'tags' est la sortie de ctags, que j'utilise pour 'go to function definition' et autres dans des outils comme vim. En tant que tel, il contient au moins une copie de chaque mot et symbole de mon code source, il vaut donc la peine de sauter de vos résultats de recherche.
"$ *" à la fin est la syntaxe bash pour "et tous les autres paramètres de la ligne de commande", vous pouvez donc passer le modèle et dir pour rechercher normalement et remplacer tous les autres drapeaux de ligne de commande que vous souhaitez .
L' --color
option a déjà été mentionnée à plusieurs reprises, mais je voudrais ajouter qu'il est possible de configurer la couleur dans laquelle les correspondances seront mises en évidence à l'aide d'une variable d'environnement
export GREP_COLOR="1;33"
La couleur doit être codée à l'aide des codes de couleur ANSI, pour référence
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
est obsolète. Utilisez GREP_COLORS
plutôt.
Comme je n'ai vu aucun exemple de définition de couleurs, voici une configuration simple pour 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
Soyez prudent GREP_OPTIONS
; ne l'utilisez pas pour autre chose que des choses comme --color=auto
ou cela gâchera tous les scripts qui utilisent grep sur votre système.