Récemment, j'ai reçu ce find
one-liner, mais je ne suis pas en mesure d'expliquer d'où vient la différence des deux ci-dessous:
Exemple 1
[root@centos share]# find . -exec grep -i "madis" {} /dev/null \;
./names:Madison Randy:300:Product Development
Exemple 2
[root@centos share]# find . -exec grep -i "madis" {} \;
Madison Randy:300:Product Development
Comme vous pouvez le voir, dans le premier, il y a le fichier spécifique dont dérive cette chaîne et jusqu'à présent, je ne suis vraiment pas en mesure de savoir pourquoi cela se produit.
/dev/null
est d'être sûr que tout ce qui est grep-ed ne sera pas trouvé dans le/dev/null
fichier (vide) , donc seuls les emplacements corrects sont sortis"/dev/null
vous ne perdez pas de temps à chercher dans un fichier factice non vide. Et enfin, l'intention de chercher/dev/null
est évidente pour ceux qui connaissent cet idiome.man grep
:La différence résulte de l'appel de grep avec un ou deux arguments de fichier dans les deux cas. Au lieu d'ajouter,
/dev/null
vous pouvez appelergrep
avec l'argument-H
. Peut-être que le/dev/null
comportement est plus largement pris en charge.la source
grep -H
n'est pas portable - l'/dev/null
astuce fonctionne sans GNU grep.Le premier exemple équivaut à exécuter grep sur deux fichiers pour chaque fichier trouvé à la suite de l'
find
expression. Par exemple, sifind
trouve trois fichiersa.txt
,b.txt
etc.txt
puisgrep
courront commeÀ qui
grep
affichera le nom de fichier auquel correspond la sortie. Comme rien ne correspondra à / dev / null, il est garanti que le nom de fichier du premier fichier sera imprimé s'il correspond.Alors que le deuxième exemple équivaut à
Dans ce cas, le nom de fichier ne sera pas imprimé pour les correspondances car il n'y a qu'un seul argument.
la source