AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 14212
Accepted
jldugger
jldugger
Asked: 2009-05-29 18:12:43 +0800 CST2009-05-29 18:12:43 +0800 CST 2009-05-29 18:12:43 +0800 CST

如何区分两个配置文件?

  • 772

我有两个 snmpd.conf 文件,一个在可以工作的服务器上,一个不工作。如何区分两个配置文件,同时去除不相关的注释和换行符?

linux configuration diff
  • 11 11 个回答
  • 14286 Views

11 个回答

  • Voted
  1. rgmarcha
    2009-05-29T18:56:44+08:002009-05-29T18:56:44+08:00

    如果您对vim有点熟悉,我强烈建议您使用vimdiff:

    vimdiff file1 file2
    

    这将打开一个带有两个窗格的 vim 会话,每一侧都有一个文件。突出显示和颜色将指示文件之间的差异,并且所有相同的部分将被隐藏(折叠,但可展开)。

    然后,如果要选择性地将一个文件的差异合并到另一个文件,可以使用以下命令:

    (考虑“当前文件”是光标所在的那个)

    ^W^W 将焦点从一个文件的窗口转移到另一个文件的窗口

    ]c 前进到有差异的下一个区块

    [c 反向搜索前一个有差异的块

    do ( diff o btain ) 将更改从另一个文件带到当前文件

    dp ( d iff p ut) 将更改从当前文件发送到另一个文件

    注意:如果您在一个块上或仅在一个块下的一行上,do和dp都可以工作。

    你 对你撤消

    zo 展开/取消隐藏文本

    zc重新折叠/重新隐藏文本

    zr将完全展开两个文件(使用:help fold了解有关折叠的更多信息)

    :diffupdate将重新扫描文件以进行更改

    当您开始移动更改的文本或引入更改时,文件中现在相同的部分也会自动折叠。

    完成后,您可以退出并使用:xa 写入这两个文件!

    您还可以一次写入、退出、放弃更改等,就像您通常使用 vim 所做的那样。

    可以使用所有常用的vim命令随意编辑文件;我只描述了您可能在 vimdiff 会话中使用的最常见和最有用的命令(与通用 vim 会话相反)。

    • 19
  2. Best Answer
    Xerxes
    2009-05-29T18:29:47+08:002009-05-29T18:29:47+08:00
    diff <(grep -v '^#' f1) <(grep -v '^#' f2)
    

    为了避免空行和只包含空格的行,除了具有添加前导空格的单一差异的相同行...

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

    不过,到现在为止,我可能会将其放入脚本中并编写类似于原始建议的内容,该建议更具可读性。

    • 15
  3. Mark Norgren
    2009-05-29T19:01:45+08:002009-05-29T19:01:45+08:00

    Beyond Compare 是实现此目的的终极工具!

    链接: http ://www.scootersoftware.com/

    适用于 Windows 和 Linux。

    Jeff 不久前写了一篇关于该工具的很好的概述文章:http:
    //www.codinghorror.com/blog/archives/000454.html

    • 6
  4. Rob Chanter
    2009-05-29T23:17:38+08:002009-05-29T23:17:38+08:00

    扩展 nima 的单线,您可以将其作为 shell 函数执行并将其放入您的 .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 很好,并且理解版本控制的目录/文件。

    • 5
  5. Kosta
    2009-05-30T01:40:35+08:002009-05-30T01:40:35+08:00

    清理完评论后,我建议使用 KDiff3,它是一个非常好的 diff/merge 工具,你不需要 vim fu 来使用它:)

    • 4
  6. jj33
    2009-05-29T18:22:43+08:002009-05-29T18:22:43+08:00

    可能有一种更优雅的方式来做到这一点,但务实(而且快速):

    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
    
    • 3
  7. Neil
    2009-05-29T19:26:17+08:002009-05-29T19:26:17+08:00

    如果您使用的是类似 bash 的 shell,您可以试试这个:

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

    您也可以更改diff为vimdiff或gvimdiff两者都附带vim。

    • 2
  8. akaihola
    2010-12-15T13:11:09+08:002010-12-15T13:11:09+08:00

    扩展 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)
    
    • 2
  9. Oriettaxx
    2012-02-13T10:10:32+08:002012-02-13T10:10:32+08:00

    有时,可以通过在 diff 之前对文件进行排序来去除几个额外的公共行,所以我将添加到已经编写的以下内容:

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

    这对于行的顺序不影响其内容的文件当然是有意义的(所以要注意)。

    • 2
  10. Mark
    2009-05-30T12:04:25+08:002009-05-30T12:04:25+08:00

    这与 nima 的一个衬里相同,但也会根据某人的要求过滤掉空白行。

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

    (如果可能的话,我也会安装 colordiff 并使用它来代替普通的 diff)

    • 1

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve