【问题标题】:Compare two files and print the differences in specific format not using "diff" command比较两个文件并以特定格式打印差异,而不使用“diff”命令
【发布时间】:2015-12-03 06:17:12
【问题描述】:

嗨,我有两个文件,每个文件都包含 1 行数据。通常我只是使用 diff 命令来查看两个文件之间的区别。

 file1:
    a.tag
    b.tag
    c.tag

 file2:
   a.tag
   b.tag
   d.tag

我想要一个命令来告诉我文件有什么不同,并以这种格式给我文件名。我使用 diff 但如果只是不做我想要的.. 我希望输出看起来像这样..

我喜欢做的事:比较两个文件,并以这种格式只打印每个文件的不同之处:

 file1:c.tag
 file2:d.tag

你能帮忙吗?

【问题讨论】:

    标签: awk sed diff


    【解决方案1】:

    实际上diff 命令提供了相当灵活的输出选项。你可以使用这个命令:

    diff 
      --unchanged-line-format='' \
      --old-line-format='file1:%L' \
      --new-line-format='file2:%L' \
      file1 file2
    

    输出:

    file1:c.tag
    file2:d.tag
    

    我对旧行和新行都使用%L 转义序列。 %L 表示打印该行的内容。未更改的行将被跳过,因为我为此传递了一个空字符串。


    为了概括它并使其适用于任意文件名,您可以将其包装到 shell 函数中。例如,将其放入您的 bashrc 中:

    function mydiff() {
        diff 
          --unchanged-line-format='' \
          --old-line-format="$1:%L" \
          --new-line-format="$2:%L" \
          "$1" "$2"
    }
    

    获取 bashrc 或启动一个新的 shell 并像这样调用它:

    mydiff file1 file2
    

    【讨论】:

    • 嗨,我尝试了该命令,但它不起作用 - 我将所有内容放在一行上,我得到了这个
    • 简单优雅的解决方案!对这些选项进行一些解释会更有帮助
    • 是的,有两个文件,因为我已经列出了它们 file1 和 file2 .. 当我运行你的命令 diff 时,我得到以下信息:额外的操作数 `file1' diff:尝试 `diff --help' 获取更多信息信息。
    • @theuniverseisflat 你去掉斜线了吗?它们只是多行版本所需要的。否则,您使用的是哪个版本的差异? (diff --version)
    • 嗨,我正在使用 diff (GNU diffutils) 2.8.1
    猜你喜欢
    • 2013-06-17
    • 2016-12-24
    • 1970-01-01
    • 2019-05-15
    • 2019-08-03
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多