İki snmpd.conf dosyam var, biri çalışan bir sunucuda diğeri çalışmıyor. Alakasız yorumları ve yeni satırları çıkarırken iki yapılandırma dosyasını nasıl dağıtabilirim?
İki snmpd.conf dosyam var, biri çalışan bir sunucuda diğeri çalışmıyor. Alakasız yorumları ve yeni satırları çıkarırken iki yapılandırma dosyasını nasıl dağıtabilirim?
Yanıtlar:
diff <(grep -v '^#' f1) <(grep -v '^#' f2)
Boş satırlar ve boşluklar dışında hiçbir şey içermeyen satırlardan kaçınmak için, ek satır aralarında tek bir fark bulunan özdeş satırlara ek olarak ...
diff -b \
<(grep -vE '^([ \t]*#|^[ \t]*$)' f1)\
<(grep -vE '^([ \t]*#|^[ \t]*$)' f2)
Bu noktada, muhtemelen bunu bir senaryoya koyarım ve orijinal öneri gibi biraz daha okunabilir bir şey yazardım.
Eğer vim ile biraz rahat olursanız, vimdiff'i kullanmanızı şiddetle tavsiye ederim :
vimdiff file1 file2
Bu, her iki tarafında bir dosya bulunan iki bölmeli bir vim oturumu açar. Vurgular ve renkler dosyalar arasındaki farkları gösterir ve tüm özdeş parçalar gizlenir (katlanır, ancak genişletilebilir).
Daha sonra, bir dosyadan diğerine farklılıkları seçici olarak birleştirmek istiyorsanız, aşağıdaki komutları kullanabilirsiniz:
("Geçerli dosyayı" imlecin bulunduğu dosya olarak düşünün)
^ W ^ W odağı bir dosyanın penceresinden diğer dosyanın penceresine değiştirmek için
] c farklılıklar ile bir sonraki bloğa ilerlemek için
[c önceki blokta farklılıkları olan ters arama yapmak için
diğer dosyadan geçerli dosyaya değişiklik getirmek için do ( d iff o btain)
Geçerli dosyadan başka bir dosyaya değişiklik göndermek için dp ( d iff p ut)
Not: Bir blokta veya bir blok altında yalnızca bir satırdaysanız hem do hem de dp çalışır.
u için u NDO'lu
metni açmak / gizlemek için zo
metni yeniden katlamak / yeniden gizlemek için zc
zr her iki dosyayı da tamamen açacaktır (kullan : katlama hakkında daha fazla bilgi için katlanmaya yardım et )
: diffupdate dosyaları değişiklikler için yeniden tarar
Değiştirilen metni hareket ettirmeye veya değişiklikleri getirmeye başladığınızda, dosyaların aynı bölümleri de otomatik olarak katlanır.
İşiniz bittiğinde her iki dosyayı da kapatabilir ve yazabilirsiniz : xa!
Ayrıca, normalde vim'de yaptığınız gibi, her seferinde bir bölme yazabilir, bırakabilir, değişiklikleri atayabilirsiniz.
İstediğiniz dosyaları düzenlemek için tüm yaygın vim komutlarını kullanabilirsiniz; Sadece bir vimdiff oturumunda kullanacağınız en yaygın ve kullanışlı komutları tanımladım (genel bir vim komutunun aksine).
Karşılaştırma ötesinde bunun için mükemmel bir araçtır!
Bağlantı: http://www.scootersoftware.com/
Windows ve Linux için kullanılabilir.
Jeff bir süre önce araç hakkında iyi bir genel bakış makalesi yazdı:
http://www.codinghorror.com/blog/archives/000454.html
Nima'nın tek astarını genişleterek, bunu bir kabuk işlevi olarak yapabilir ve .bashrc'nize bırakabilirsiniz.
diff <(grep -v '^#' f1) <(grep -v '^#' f2)
olur (-u kullanarak çünkü birleştirilmiş diffs'leri severim)
function cleandiff {
diff -u <(grep -v '^#' $1| grep -v '^ *$') <(grep -v '^#' $2 | grep -v '^ *$')
}
GUI diff izleyicileri seviyorsanız, meld güzel ve revizyon kontrollü dirs / dosyaları anlar.
Yorumları temizledikten sonra, KDiff3 kullanmanızı tavsiye ederim, oldukça iyi bir fark / birleştirme aracı ve kullanmak için vim fu gerekmez :)
Bunu yapmanın daha zarif bir yolu olabilir, ancak pragmatik olarak (ve hızlı bir şekilde):
grep -v '^#' server1-snmpd.conf | grep -v '^ *$' > server1-snmpd.conf-clean
grep -v '^#' server2-snmpd.conf | grep -v '^ *$' > server2-snmpd.conf-clean
diff server1-snmpd.conf-clean server2-snmpd.conf-clean
Bash benzeri bir kabuk kullanıyorsanız, bunu deneyebilirsiniz:
# Name this diff-stripped
STRIPPED=
for i in $*; do
egrep -v "^#|^\s*" "$i" > "$i.stripped"
STRIPPED="$STRIPPED $i.stripped"
done
diff $STRIPPED
Sonra şu şekilde çağırın:
diff-stripped file1 file2 ...
Ayrıca değiştirebilir diff
için vimdiff
ya gvimdiff
hangi ikisi birlikte gelir vim
.
Xerxes çözümünü genişleterek diff
, farklılıkları görüntülemek için daha karmaşık araçlar kullanabilirsiniz .
wdiff
zaman zaman "çok akıllı" olabilir, ancak yapılandırma dosyaları arasındaki farklara hızlı bir bakış atmak için genellikle yararlı buluyorum. Bu komut dosyası, renkli çıktılar için kullanılabilir:
#!/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
Ubuntu ve diğer Debian tabanlı sistemlerde, apt-get install wdiff
bu komut dosyasını kullanmadan hemen önce.
Meld güzel bir GUI alternatifidir, ancak "Metin filtreleme" özelliğinin bazı sorunları vardır. Metin filtrelemesi kullanmak yerine, sonuçları Meld'de göstermeden önce yorumları tamamen kaldırırım. Dezavantajı dosyaları karşılaştırırken düzenleme yeteneğini kaybediyor. İşte Meld'i kullanmak için basit bir komut dosyası:
#!/bin/bash
meld <(grep -vE '^([ \t]*#|^[ \t]*$)' $1) \
<(grep -vE '^([ \t]*#|^[ \t]*$)' $2)
Bazen, birkaç ek ortak satır diff önce dosyaları sıralayarak soyulmuş olabilir, bu yüzden aşağıdakileri zaten yazdıklarıma ekleyeceğim:
diff <(grep -v '^#' f1 | sort) <(grep -v '^#' f2 | sort)
bu elbette satırların sırasının içeriğini etkilemediği dosyalar için mantıklıdır (bu yüzden unutmayın).
Dosyaları dağıtmak için WinMerge http://winmerge.org kullanıyorum , onları makineme indirmem gerekiyor, ancak işe yarıyor.
level
! =)