2つのsnmpd.confファイルがあります。1つはサーバー上にあり、もう1つはそうではありません。無関係なコメントや改行を削除しながら、2つの構成ファイルを比較するにはどうすればよいですか?
2つのsnmpd.confファイルがあります。1つはサーバー上にあり、もう1つはそうではありません。無関係なコメントや改行を削除しながら、2つの構成ファイルを比較するにはどうすればよいですか?
回答:
diff <(grep -v '^#' f1) <(grep -v '^#' f2)
空白行、およびスペース以外の何も含まない行、および追加された先行スペースの単一の違いがある同一行に加えて...
diff -b \
<(grep -vE '^([ \t]*#|^[ \t]*$)' f1)\
<(grep -vE '^([ \t]*#|^[ \t]*$)' f2)
ただし、この時点までに、おそらくそれをスクリプトに入れて、元の提案のようにもう少し読みやすいものを書くと思います。
vimにある程度慣れている場合は、vimdiffを使用することを強くお勧めします。
vimdiff file1 file2
これにより、両側に1つのファイルがある2つのペインでvimセッションが開きます。ハイライトと色はファイル間の違いを示し、同じ部分はすべて隠されます(折りたたまれますが、展開可能です)。
次に、あるファイルから別のファイルに差分を選択的にマージする場合、次のコマンドを使用できます。
(「現在のファイル」をカーソルのあるものと考えてください)
あるファイルのウィンドウから別のファイルのウィンドウにフォーカスを変更するには^ W ^ W
] c 違いのある次のブロックに進む
[c 違いのある前のブロックの逆検索
do (d iff o btain)他のファイルから現在のファイルに変更をもたらす
dp (d iff p ut)は、現在のファイルから他のファイルに変更を送信します
注:ブロック上またはブロックの下の1行だけの場合、doとdpの両方が機能します。
U のU NDO
テキストを展開/再表示するzo
テキストを再折りたたみ/再表示するにはzc
zrは両方のファイルを完全に展開します(折りたたみの詳細については、:help foldを使用してください)
:diffupdateは、ファイルの変更を再スキャンします
変更されたテキストを移動したり、変更を取り込んだりすると、ファイルの現在同一の部分も自動的に折りたたまれます。
終了したら、:xa!を使用して両方のファイルを終了して書き込むことができます!
また、vimで通常行うように、一度に1ペインずつ、変更を書き込み、終了、破棄することもできます。
すべての一般的なvimコマンドを使用して、ファイルを自由に編集できます。vimdiffセッションで使用する可能性が高い最も一般的で便利なコマンド(一般的なvimセッションとは対照的に)についてのみ説明しました。
Beyond Compareはこのための究極のツールです!
リンク:http : //www.scootersoftware.com/
WindowsおよびLinuxで利用可能。
ジェフはしばらく前にツールについての良い概要記事を書きました:http :
//www.codinghorror.com/blog/archives/000454.html
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を理解します。
コメントを削除したら、KDiff3を使用することをお勧めします。これは非常に優れたdiff / mergeツールであり、vim fuを使用する必要はありません。
Xerxesのソリューションを拡張diff
すると、違いを表示するためよりも洗練されたツールを使用できます。
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)
WinMerge http://winmerge.orgを使用してファイルを比較します。ファイルをマシンにプルダウンする必要がありますが、機能します。
level
!=)