我有两个snmpd.conf文件,一个在工作正常的服务器上,另一个在不工作的服务器上。如何在去除不相关的注释和换行符的同时区分两个配置文件?
我有两个snmpd.conf文件,一个在工作正常的服务器上,另一个在不工作的服务器上。如何在去除不相关的注释和换行符的同时区分两个配置文件?
Answers:
diff <(grep -v '^#' f1) <(grep -v '^#' f2)
为了避免出现空行以及除了空格之外只包含空格的行,除了添加了前导空格的唯一区别的相同行之外...
diff -b \
<(grep -vE '^([ \t]*#|^[ \t]*$)' f1)\
<(grep -vE '^([ \t]*#|^[ \t]*$)' f2)
但是,到那时,我可能已经将其放入脚本中并编写了一些类似原始建议的内容,但更具可读性。
如果您对vim感到满意,我强烈建议您使用vimdiff:
vimdiff file1 file2
这将打开一个带有两个窗格的vim会话,每侧一个文件。高亮和颜色将指示文件之间的差异,所有相同的部分将被隐藏(折叠,但可扩展)。
然后,如果要有选择地合并一个文件与另一个文件之间的差异,可以使用以下命令:
(将“当前文件”视为光标所在的文件)
^ W ^ W 将焦点从一个文件的窗口切换到另一个文件的窗口
] c 前进到具有差异的下一个块
[c 反向搜索具有差异的前一个块
做 (d IFF Ø btain)把从其他文件更改到当前文件
dp (d iff p ut)将更改从当前文件发送到另一个文件
注意:如果您在一个块上或仅在块下一行,则do和dp都可以工作。
ü 到ü NDO
zo 展开/取消隐藏文本
zc重新折叠/重新隐藏文本
zr会完全展开两个文件(使用:help fold可了解有关折叠的更多信息)
:diffupdate将重新扫描文件以进行更改
当您开始移动更改的文本或引入更改时,文件中现在相同的部分也会自动折叠。
完成后,可以使用:xa退出并写入两个文件!
您也可以一次编写,退出,放弃更改等操作,就像通常使用vim一样。
您可以使用所有常见的vim命令随意编辑文件;我仅描述了您可能在vimdiff会话中使用的最常见和最有用的命令(与通用vim相对)。
超越比较是做到这一点的终极工具!
链接:http: //www.scootersoftware.com/
适用于Windows和Linux。
Jeff不久前写了一篇很好的有关该工具的概述文章:http :
//www.codinghorror.com/blog/archives/000454.html
清除注释后,我建议使用KDiff3,它是一个非常好的差异/合并工具,您不需要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的简单脚本:
#!/bin/bash
meld <(grep -vE '^([ \t]*#|^[ \t]*$)' $1) \
<(grep -vE '^([ \t]*#|^[ \t]*$)' $2)
我使用WinMerge http://winmerge.org来比较文件,因为我必须将它们下拉到我的机器上,但是它适用。
level
!=)