Si les lignes sont identiques et que vous voulez seulement savoir s'il y a des lignes supplémentaires dans un fichier ou dans un autre, vous pouvez utiliser sort & diff (et Process Substitution ici):
$ diff -B <(sort v1.tcl) <(sort v2.tcl)
2c2,3
< foo1
---
> foo2
> goodbye2
Avec diff, -B
ignorer les lignes vides. Vous pouvez ensuite utiliser grep -n [pattern] file
pour trouver la ligne de la tendance est à (peut - être avec un ou une combinaison de grep
, cut
, sed
, awk
), si cela importe.
Voici une réponse plus complète, indiquant le numéro de fichier et le numéro de ligne contenant les correspondances. N'utilise pas sed ou awk, seulement bash, cut, grep ... tout y est (essentiellement) dans une ligne:
diff -B <(sort v1.tcl) <(sort v2.tcl) | while read -r line; do if \
echo "$line" | grep -q "^<"; then grep -F -n -H \
"$(echo "$line"|cut -c3-)" v1.tcl ; elif echo "$line" | grep -q \
"^>"; then grep -F -n -H "$(echo "$line"|cut -c3-)" v2.tcl ; fi done
Ou divisé en plusieurs lignes:
diff -B <(sort v1.tcl) <(sort v2.tcl) | while read -r line
do
if echo "$line" | grep -q "^<"
then grep -F -n -H "$(echo "$line"|cut -c3-)" v1.tcl
elif echo "$line" | grep -q "^>"
then grep -F -n -H "$(echo "$line"|cut -c3-)" v2.tcl
fi
done
Et en fonction de vos fichiers d'entrée (surtout si vous avez des lignes avec des barres obliques inverses), j'utilise ces options pour read & grep:
read -r
ne pas permettre aux barres obliques inverses d'échapper des caractères
grep -F
Interprétez PATTERN en tant que liste de chaînes fixes (au lieu d'expressions régulières), séparées par des nouvelles lignes, dont chacune doit correspondre
De plus, en utilisant les commentaires de Pimp Juice IT , s'il y a des barres obliques inverses vers les lignes dans les fichiers en entrée, grep génère l'erreur "fichier: ligne, des barres obliques inversées". L'utilisation de l' -F
option permettant à grep de supprimer la dernière erreur de barre oblique inversée entraîne une solution beaucoup plus petite réservée à grep:
grep -FvHn -f v2.tcl v1.tcl ;grep -FvHn -f v1.tcl v2.tcl
Options de grep utilisées:
-f
Obtenir des modèles de FILE, un par ligne.
-F
Interprétez PATTERN en tant que liste de chaînes fixes (au lieu d'expressions régulières), séparées par des nouvelles lignes, dont chacune doit correspondre
-v
Inverser le sens de la concordance pour sélectionner des lignes non concordantes.
-H
Imprimer le nom du fichier pour chaque match
-n
Préfixez chaque ligne de sortie avec le numéro de ligne basé sur 1 dans son fichier d'entrée.
grep: Trailing backslash
. Je vérifierai les pages de manuel pour savoir si je peux les traiter comme du texte ...