İki yapılandırma dosyasını nasıl dağıtabilirim?


15

İ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?


1
Dikkat edin jldugger! Yapmak üzeresiniz level! =)
Xerxes

Yorumları kesmek gerçekten kötü bir fikir, onlara bakmadan ilgisiz olduklarını nasıl biliyorsunuz?
AnonymousLurker

Yanıtlar:


15
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.


Tek satırlık çözüm sunmak için +1
wzzrd

Beyaz boşluk içeren satırların nasıl çıkarılacağına dair bir fikriniz var mı? Yorumları kestikten sonra, aralarında boşluk bırakan çok sayıda boş satır var.
jldugger

@jldugger, yorumları ve boşlukları hariç tutmak için grep'i böyle olacak şekilde güncellemeyi deneyin. - egrep -v '^ (#. * |) $'
Zoredache

19

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).


6

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


Karşılaştırma ötesinde harika!
Clinton Blackmore

* nix sistemlerinde kullanılabilir mi?
Preet Sangha

Beyond Compare 3 Linux'ta bir konsol uygulaması olarak çalışmaz. X-Windows gerektirir. Desteklenen Linux dağıtımları (32 bit) Red Hat Enterprise Linux 4, 5 Fedora 4-10 Novell Suse Linux Enterprise Desktop 10 openSUSE 10.3, 11 Ubuntu 6.06 - 8.10 Test Edilmedi 64 bit Linux çekirdeği Uyumlu Değil Red Hat Enterprise Linux 3
İşaretle Norgren

Artık bu araç olmadan yaşayamam! Aşırı bir zaman tasarrufu. PC'den Mac'e yaklaşık 1 yıl önce değiştiğimde, Mac'e de taşındığını öğrendiğim için çok mutlu oldum.
Jpsy

5

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.


+1 için grafik dif'ing sooo çok daha kolay hale getirdi meld için.
Avery Payne

4

Yorumları temizledikten sonra, KDiff3 kullanmanızı tavsiye ederim, oldukça iyi bir fark / birleştirme aracı ve kullanmak için vim fu gerekmez :)


3

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

2

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 diffiçin vimdiffya gvimdiffhangi ikisi birlikte gelir vim.


2

Xerxes çözümünü genişleterek diff, farklılıkları görüntülemek için daha karmaşık araçlar kullanabilirsiniz .

wdiff

wdiffzaman 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 wdiffbu komut dosyasını kullanmadan hemen önce.

Meld

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)

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).


1

Bu nima'nın bir astarı ile aynıdır, ancak boş satırları birinin istediği gibi filtreleyecektir.

diff -u <(egrep -v '^(#| *$)' f1) <(egrep -v '^(#| *$)' f2)

(Ayrıca mümkünse kolordif kurar ve normal fark yerine kullanırım)


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.