Tuyau de sortie à utiliser que les spécifications de la recherche pour un grep sur Linux
Comment puis-je rediriger la sortie de grep comme le modèle de recherche pour un autre grep?
Comme un exemple:
grep <Search_term> <file1> | xargs grep <file2>
Je veux la sortie de la première grep comme terme de recherche pour la deuxième grep. La commande ci-dessus est le traitement de la sortie de la première grep comme nom de fichier pour la deuxième grep. J'ai essayé d'utiliser le -e
option pour la deuxième grep, mais il ne fonctionne pas non plus.
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez Bash, alors vous pouvez utiliser backticks:
la
-e
drapeau et les guillemets sont là pour veiller à ce que toute sortie de la premièregrep
qui commence par un trait d'union n'est pas interprété comme une option pour la deuxièmegrep
.Noter que le double citant truc (qui assure également que la sortie de la commande grep est traité comme un seul paramètre) ne fonctionne qu'avec Bash. Il ne semble pas fonctionner avec (t)csh.
Note également que les backticks sont le standard pour obtenir la sortie d'un programme dans la liste des paramètres de l'autre. Pas tous les programmes un moyen pratique pour la lecture des paramètres à partir de l'entrée standard de la façon que (f)grep n'.
Vous devez utiliser
xargs
's-i
commutateur:Cela prend l'option après
-i
(foo
dans ce cas) et remplace chaque occurrence de celui-ci dans la commande avec la sortie de la premièregrep
.C'est la même chose que:
Essayer
-
". Merci!Je voulais pour rechercher du texte dans les fichiers (à l'aide de grep) qui a eu un certain modèle dans leur nom de fichier (qui se trouve à l'aide de la trouver) dans le répertoire courant. J'ai utilisé la commande suivante:
Ici pattern2 est le modèle dans les noms de fichier et pattern1 est le modèle recherché
dans les fichiers correspondants pattern2.
edit: Pas strictement de la tuyauterie, mais toujours liés et très utile...
C'est ce que j'utilise pour rechercher un fichier à partir d'une liste:
Bon enfreindre les règles que ce n'est pas une réponse, juste une remarque que je ne peux pas obtenir aucune de ces solutions fonctionnent.
fonctionne très bien.
échoue.
échoue. Note qu'un I majuscule est nécessaire. Si j'utilise que tout est bon.
plutôt des travaux en ce qu'elle renvoie une ligne pour les termes qui correspondent mais il renvoie également à une ligne
grep: line 3 in test: No such file or directory
pour chaque fichier qui n'est pas de trouver une correspondance.Suis-je raté quelque chose ou est-ce juste des différences dans mon Darwin distribution ou bash?
J'ai essayé de cette façon , et il fonctionne très bien.
Vous devriez grep dans une telle manière, pour extraire seulement les noms, voir le paramètre-l (L minuscule):
Parce que sur le simple grep, la sortie est beaucoup plus d'infos que les noms de fichiers uniquement. Par exemple, lorsque vous faites
Vous pipe à xargs info comme ça
Tuyauterie tout de au-dessus de la ligne de sens pour passer à xargs.
Mais quand vous ne grep -l someSearch *, votre sortie ressemble à ceci:
Une telle sortie peut être passée maintenant à xargs
J'ai trouvé la commande suivante fonctionne à l'aide de $() avec ma première commande à l'intérieur de la parenthèse pour avoir le shell de l'exécuter en premier.
Je l'utilise pour regarder à travers les fichiers pour une adresse IP lorsque je donne un nom d'hôte.