J'ai deux fichiers A1 et A2 (non triés). A1 est la version précédente de A2 et certaines lignes ont été ajoutées à A2. Comment puis-je obtenir les nouvelles lignes ajoutées à A2?
Note: Je veux juste que les nouvelles lignes soient ajoutées et ne veux pas les lignes qui étaient en A1 mais supprimées en A2. Quand je fais diff A1 A2
, Je reçois les ajouts ainsi que les suppressions mais je ne veux que des ajouts.
S'il vous plaît suggérer un moyen de le faire.
diff
puis grep
pour le type de modification souhaité.
diff -u A1 A2 | grep -E "^\+"
Tous les éléments ci-dessous sont copiés directement à partir de la réponse serverfault de @ TomOnTime ici :
Afficher les lignes qui n'existent que dans le fichier a: (c'est-à-dire ce qui a été supprimé de a)
comm -23 a b
Afficher les lignes qui n'existent que dans le fichier b: (c'est-à-dire ce qui a été ajouté à b)
comm -13 a b
Afficher les lignes qui n'existent que dans un fichier ou l'autre: (mais pas les deux)
comm -3 a b | sed 's/^\t//'
(Avertissement: si le fichier a
contient des lignes commençant par TAB, il (le premier TAB) sera supprimé de la sortie.)
REMARQUE: Les deux fichiers doivent être triés pour que "comm" fonctionne correctement. S'ils ne sont pas déjà triés, vous devez les trier:
sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted
Si les fichiers sont extrêmement longs, cela peut s'avérer fastidieux, car il nécessite une copie supplémentaire et par conséquent deux fois plus d'espace disque.
Edit: notez que la commande peut être écrite de manière plus concise en utilisant la substitution de processus (merci à @phk pour le commentaire):
comm -12 <(sort < a) <(sort < b)
Tu peux essayer ça
diff --changed-group-format='%>' --unchanged-group-format='' A1 A2
Les options sont documentées dans man diff
:
--GTYPE-group-format=GFMT
format GTYPE input groups with GFMT
et:
LTYPE is 'old', 'new', or 'unchanged'.
GTYPE is LTYPE or 'changed'.
et:
GFMT (only) may contain:
%< lines from FILE1
%> lines from FILE2
[...]
Vous pouvez taper:
grep -v -f A1 A2
La méthode simple consiste à utiliser:
sdiff A1 A2
Une autre méthode consiste à utiliser comm
, comme vous pouvez le voir dans Comparaison de deux listes non triées sous Linux, listant l'unique dans le second fichier
git diff path/file.css | grep -E "^\+" | grep -v '+++ b/' | cut -c 2-
grep -E "^\+"
est une réponse précédente acceptée, elle est incomplète car elle laisse des éléments non sourcegrep -v '+++ b'
supprime la ligne non source avec le nom de fichier de la version ultérieurecut -c 2-
supprime la colonne de +
signes, peut également utiliser sed 's/^\+//'
comm
ou sdiff
n'étaient pas une option à cause de git.
Une approche similaire pour les merp's mais avec un espoir plus compréhensible et facile à modifier:
diff \
--new-line-format="- %L" \
--old-line-format="" \
--unchanged-line-format="" \
A1 A2