2010-07-10 5 views
3

J'essaie de déterminer quel en-tête déclare une fonction spécifique. J'ai utilisé grep pour trouver des instances de l'utilisation de la fonction; maintenant, je veux trouver quel en-tête est inclus par tous les fichiers. Je suis au courant de la comm utility; Cependant, il ne peut comparer que deux fichiers triés. Y at-il un utilitaire Unix qui peut trouver les lignes communes entre un nombre arbitraire de fichiers non triés, ou dois-je écrire le mien?Recherche de lignes communes à plusieurs fichiers

Répondre

0
cat *.c | sort | uniq -c | grep -e '^ *COUNT #include' 

COUNT est le nombre de fichiers transmis à cat. En jouant autour, je cette variante pour voir quels fichiers je #Include au moins 10 fois:

cat *.c | sort | uniq -c | grep -e '^ *[0-9][0-9]\+ #include' 
+0

Ce ne trouvera pas un en-tête qui est inclus (foo.c indirectement comprend foo.h qui comprend bar.h , alors que baz.c inclut baz.h qui inclut bar.h). – Borealid

+0

Vrai, mais le comm. J'ai pris cela comme une licence pour compter sur une stricte égalité et pour ignorer les en-têtes, y compris les autres en-têtes. Sans un peu d'aide, des espaces ou des commentaires non concordants pourraient aussi «uniq -c». – drawnonward

Questions connexes