2つの構成ファイルを比較するにはどうすればよいですか?


15

2つのsnmpd.confファイルがあります。1つはサーバー上にあり、もう1つはそうではありません。無関係なコメントや改行を削除しながら、2つの構成ファイルを比較するにはどうすればよいですか?


1
jlduggerに注意してください!あなたがやろうとしているlevel!=)
Xerxes

コメントを削除するのは本当に悪い考えです。コメントを見ずに無関係なコメントをどのように知っていますか?
AnonymousLurker

回答:


15
diff <(grep -v '^#' f1) <(grep -v '^#' f2)

空白行、およびスペース以外の何も含まない行、および追加された先行スペースの単一の違いがある同一行に加えて...

diff -b \
  <(grep -vE '^([ \t]*#|^[ \t]*$)' f1)\
  <(grep -vE '^([ \t]*#|^[ \t]*$)' f2)

ただし、この時点までに、おそらくそれをスクリプトに入れて、元の提案のようにもう少し読みやすいものを書くと思います。


単一行ソリューションを提供するための+1
wzzrd 2009年

空白も含む行を省略する方法に関するアイデアはありますか?コメントを切り取ると、それらの間に空白行がたくさんあることがわかります。
jldugger 09年

@jldugger、このようにgrepを更新して、コメントと空白を除外してください。-egrep -v '^(#。* |)$'
ゾレダチェ2009年

19

vimにある程度慣れている場合は、vimdiffを使用することを強くお勧めします。

vimdiff file1 file2

これにより、両側に1つのファイルがある2つのペインでvimセッションが開きます。ハイライトと色はファイル間の違いを示し、同じ部分はすべて隠されます(折りたたまれますが、展開可能です)。

次に、あるファイルから別のファイルに差分を選択的にマージする場合、次のコマンドを使用できます。

(「現在のファイル」をカーソルのあるものと考えてください)

あるファイルのウィンドウから別のファイルのウィンドウにフォーカスを変更するには^ W ^ W

] c 違いのある次のブロックに進む

[c 違いのある前のブロックの逆検索

dod iff o btain)他のファイルから現在のファイルに変更をもたらす

dpd iff p ut)は、現在のファイルから他のファイルに変更を送信します

注:ブロック上またはブロックの下の1行だけの場合、dodpの両方機能します。

UU NDO

テキストを展開/再表示するzo

テキストを再折りたたみ/再表示するにはzc

zrは両方のファイルを完全に展開します(折りたたみの詳細については、:help foldを使用してください

:diffupdateは、ファイルの変更を再スキャンします

変更されたテキストを移動したり、変更を取り込んだりすると、ファイルの現在同一の部分も自動的に折りたたまれます。

終了したら、:xa!を使用して両方のファイルを終了して書き込むことができます

また、vimで通常行うように、一度に1ペインずつ、変更を書き込み、終了、破棄することもできます。

すべての一般的なvimコマンドを使用して、ファイルを自由に編集できます。vimdiffセッションで使用する可能性が高い最も一般的で便利なコマンド(一般的なvimセッションとは対照的に)についてのみ説明しました。


6

Beyond Compareはこのための究極のツールです!

リンク:http : //www.scootersoftware.com/

WindowsおよびLinuxで利用可能。

ジェフはしばらく前にツールについての良い概要記事を書きました:http :
//www.codinghorror.com/blog/archives/000454.html


比較を超えて素晴らしいです!
クリントンブラックモア

これは* nixシステムで利用可能ですか?
プリエサンガ

Beyond Compare 3は、Linuxではコンソールアプリケーションとして実行されません。X-Windowsが必要です。サポートされているLinuxディストリビューション(32ビット)Red Hat Enterprise Linux 4、5 Fedora 4-10 Novell Suse Linux Enterprise Desktop 10 openSUSE 10.3、11 Ubuntu 6.06-8.10未テスト64ビットLinuxカーネル非互換Red Hat Enterprise Linux 3
マークノルグレン

私はこのツールなしではもう生きられませんでした!極端な時間の節約。約1年前にPCからMacに変更したとき、Macにも移植されたばかりだったことに非常に満足しています。
Jpsy

5

nimaのワンライナーを拡張すると、それをシェル関数として実行し、.bashrcにドロップできます。

diff <(grep -v '^#' f1) <(grep -v '^#' f2)

になる(統合された差分が好きなので-uを使用)

function cleandiff {
  diff -u <(grep -v '^#' $1| grep -v '^ *$') <(grep -v '^#' $2 | grep -v '^ *$')
}

GUI diffビューアーが好きな場合、meldは便利で、リビジョン管理されたdirs / filesを理解します。


meldの+1。これにより、グラフィカルな差分処理が非常に簡単になりました。
エイブリーペイン

4

コメントを削除したら、KDiff3を使用することをお勧めします。これは非常に優れたdiff / mergeツールであり、vim fuを使用する必要はありません。


3

よりエレガントな方法があるかもしれませんが、実用的に(そして迅速に):

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のようなシェルを使用している場合、これを試すことができます。

# Name this diff-stripped
STRIPPED=
for i in $*; do
    egrep -v "^#|^\s*" "$i" > "$i.stripped"
    STRIPPED="$STRIPPED $i.stripped"
done

diff $STRIPPED

次に、次のように呼び出します。

 diff-stripped file1 file2 ...

また、変更可能diffvimdiffまたはgvimdiffその両方が付属していvim


2

Xerxesのソリューションを拡張diffすると、違いを表示するためよりも洗練されたツールを使用できます。

wdiff

wdiff時々「スマートすぎる」場合がありますが、構成ファイルの違いを一目で確認するのに役立つことがよくあります。このスクリプトは、色付きの出力に使用できます。

#!/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および他のDebianベースのシステムでは、apt-get install wdiffこのスクリプトを使用する直前。

溶ける

Meldは優れたGUIの代替手段ですが、その「テキストフィルタリング」機能にはいくつかの問題があります。テキストフィルタリングを使用する代わりに、Meldで結果を表示する前にコメントをすべて削除します。欠点は、ファイルを比較しながら編集する機能を失うことです。Meldを使用するための簡単なスクリプトを次に示します。

#!/bin/bash

meld <(grep -vE '^([ \t]*#|^[ \t]*$)' $1) \
     <(grep -vE '^([ \t]*#|^[ \t]*$)' $2)

2

差分の前にファイルを並べ替えることで、いくつかの追加の共通行を削除できる場合があるため、次の記述を追加します。

 diff <(grep -v '^#' f1 | sort) <(grep -v '^#' f2 | sort)

もちろんこれは、行の順序がコンテンツに影響しないファイルに意味があります(そのため注意してください)。


1

これはnimaの1つのライナーと同じですが、誰かが要求したように空白行も除外します。

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

(可能な場合はcolordiffもインストールし、通常のdiffの代わりにそれを使用します)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.