Mam dwa pliki snmpd.conf, jeden na serwerze, który działa, a drugi nie. Jak mogę różnicować dwa pliki konfiguracyjne, usuwając nieistotne komentarze i nowe linie?
Mam dwa pliki snmpd.conf, jeden na serwerze, który działa, a drugi nie. Jak mogę różnicować dwa pliki konfiguracyjne, usuwając nieistotne komentarze i nowe linie?
Odpowiedzi:
diff <(grep -v '^#' f1) <(grep -v '^#' f2)
Aby uniknąć pustych linii i linii zawierających wyłącznie spacje, oprócz identycznych linii, które mają jedną różnicę dodanych spacji wiodących ...
diff -b \
<(grep -vE '^([ \t]*#|^[ \t]*$)' f1)\
<(grep -vE '^([ \t]*#|^[ \t]*$)' f2)
W tym momencie jednak prawdopodobnie umieściłbym to w skrypcie i napisałem coś w rodzaju oryginalnej sugestii, która jest nieco bardziej czytelna.
Jeśli czujesz się komfortowo z vimem , zdecydowanie zachęcam do korzystania z vimdiff :
vimdiff file1 file2
Spowoduje to otwarcie sesji vim z dwoma oknami, z jednym plikiem po każdej stronie. Podświetlenia i kolory wskażą różnice między plikami, a wszystkie identyczne części zostaną ukryte (złożone, ale rozwijane).
Następnie, jeśli chcesz selektywnie łączyć różnice między dwoma plikami, możesz użyć następujących poleceń:
(Rozważ „bieżący plik” jako ten, w którym znajduje się kursor)
^ W ^ W, aby zmienić fokus z okna jednego pliku na okno drugiego pliku
] c, aby przejść do następnego bloku z różnicami
[c, aby cofnąć wyszukiwanie poprzedniego bloku z różnicami
do ( d iff o btain), aby wprowadzić zmiany z innego pliku do bieżącego pliku
dp ( d iff p ut), aby wysłać zmiany z bieżącego pliku do innego pliku
Uwaga: Zarówno do, jak i dp działają, jeśli jesteś na bloku lub tylko jednym wierszu pod blokiem.
U z u ndo
zo, aby rozwinąć / ukryć tekst
zc, aby ponownie złożyć / ukryć tekst
zr całkowicie rozłoży oba pliki (użyj : help fold, aby uzyskać więcej informacji na temat składania)
: diffupdate ponownie przeskanuje pliki w poszukiwaniu zmian
Gdy zaczniesz przenosić zmieniony tekst lub wprowadzać zmiany, identyczne teraz części plików również się automatycznie zwiną.
Po zakończeniu możesz zamknąć i zapisać oba pliki za pomocą : xa!
Możesz także pisać, wychodzić, odrzucać zmiany itp., Jeden panel naraz, tak jak normalnie robisz z vimem.
Możesz użyć wszystkich typowych poleceń vima, aby dowolnie edytować pliki; Opisałem tylko najbardziej popularne i przydatne polecenia, których prawdopodobnie użyjesz w sesji vimdiff (w przeciwieństwie do ogólnej wersji vim).
Beyond Compare to najlepsze narzędzie do tego!
Link: http://www.scootersoftware.com/
Dostępne dla systemu Windows i Linux.
Jeff napisał jakiś dobry artykuł poglądowy na temat narzędzia jakiś czas temu:
http://www.codinghorror.com/blog/archives/000454.html
Rozszerzając na jednowarstwową nimę, możesz to zrobić jako funkcję powłoki i upuścić ją w swoim .bashrc
diff <(grep -v '^#' f1) <(grep -v '^#' f2)
staje się (używając -u, ponieważ lubię zunifikowane różnice)
function cleandiff {
diff -u <(grep -v '^#' $1| grep -v '^ *$') <(grep -v '^#' $2 | grep -v '^ *$')
}
Jeśli podoba Ci się GUI diff viewers, meld jest fajny i rozumie pliki / pliki kontrolowane przez wersję.
Po wyczyszczeniu komentarzy radzę używać KDiff3, jest to całkiem dobre narzędzie do porównywania / scalania i nie potrzebujesz vim fu, aby go używać :)
Jeśli używasz powłoki podobnej do bash, możesz spróbować:
# Name this diff-stripped
STRIPPED=
for i in $*; do
egrep -v "^#|^\s*" "$i" > "$i.stripped"
STRIPPED="$STRIPPED $i.stripped"
done
diff $STRIPPED
Następnie wywołaj to w ten sposób:
diff-stripped file1 file2 ...
Możesz także zmienić diff
na vimdiff
lub z gvimdiff
których oba pochodzą vim
.
Rozszerzając rozwiązanie Xerxesa, możesz użyć bardziej wyrafinowanych narzędzi niż diff
do wyświetlania różnic.
wdiff
czasami bywa „zbyt mądry”, ale często przydaje mi się szybki rzut oka na różnice między plikami konfiguracyjnymi. Ten skrypt może być używany do wyświetlania w kolorach:
#!/bin/bash
RED=$'\e'"[1;31m"
GREEN=$'\e'"[1;32m"
RESET=$'\e'"[0m"
WDIFF_ARGS="-w$RED -x$RESET -y$GREEN -z$RESET --avoid-wraps"
wdiff $WDIFF_ARGS \
<(grep -vE '^([ \t]*#|^[ \t]*$)' $1) \
<(grep -vE '^([ \t]*#|^[ \t]*$)' $2) \
| less -R
W Ubuntu i innych systemach opartych na Debianie, tuż apt-get install wdiff
przed użyciem tego skryptu.
Meld jest przyjemną alternatywą dla GUI, ale jego funkcja „Filtrowania tekstu” ma pewne problemy. Zamiast korzystać z filtrowania tekstu, usuwam komentarze całkowicie przed wyświetleniem wyników w Meld. Wadą jest utrata możliwości edycji plików podczas ich porównywania. Oto prosty skrypt do korzystania z Meld:
#!/bin/bash
meld <(grep -vE '^([ \t]*#|^[ \t]*$)' $1) \
<(grep -vE '^([ \t]*#|^[ \t]*$)' $2)
Czasami można usunąć kilka dodatkowych wspólnych wierszy, sortując pliki przed różnicą, więc dodałbym do tego, co już napisano:
diff <(grep -v '^#' f1 | sort) <(grep -v '^#' f2 | sort)
ma to oczywiście sens w przypadku plików, w których kolejność linii nie wpływa na jej zawartość (więc należy pamiętać).
Używam WinMerge http://winmerge.org do różnicowania plików, oczywiście muszę ściągać je na moją maszynę, ale to działa.
level
! =)