Comment puis-je trouver des lignes dans un fichier mais pas dans l'autre en utilisant bash scripting?
Imaginer fichier 1:
#include "first.h"
#include "second.h"
#include "third.h"
// more code here
...
Imaginer le fichier 2:
#include "fifth.h"
#include "second.h"
#include "eigth.h"
// more code here
...
Je veux obtenir les en-têtes qui sont inclus dans le fichier 2, mais pas dans le fichier 1, seules ces lignes.
Ainsi, lorsque ran, un diff sur le fichier 1 et fichier 2 produira:
#include "fifth.h"
#include "eigth.h"
Je sais comment le faire en Perl/Python/Ruby, mais j'aimerais faire cela sans l'aide d'un langage de programmation différent.
source d'informationauteur Senthess
Vous devez vous connecter pour publier un commentaire.
Si c'est ok pour utiliser un fichier temporaire, essayez ceci:
Ce
file1.h
et les écrit dans le fichier/tmp/x
file2.h
qui ne figurent pas dans cette listefile2.h
Il n'a probablement pas gérer les différences dans les espaces correctement etc, mais.
EDIT:
pour éviter les faux positifs, utiliser un modèle différent pour la dernière grep (grâce à jw013 de mentionner cela):
C'est un one-liner, mais ne conserve pas l'ordre:
Si vous avez besoin de préserver l'ordre:
Cette variante exige une
fgrep
avec le-f
option. GNU grep (c'est à dire un système Linux, et puis certains) devrait fonctionner correctement.Cela ne nécessite pas de tri, ni explicite des fichiers temporaires. En théorie,
fgrep -f
pourrait utiliser un fichier temporaire dans les coulisses, mais je crois GNUfgrep
ne le fait pas.Si l'objectif n'a pas besoin d'être accompli avec Bash seul (c'est à dire, l'utilisation de programmes externes est acceptable), puis utilisez
combine
de moreutils:cat $fichier1 $fichier2 | grep '#include' | sort | uniq -u