如何`diff`文件来创建“常用”文件?

时间:2013-10-03 05:59:56

标签: css bash shell diff zsh

我有一大堆CSS文件可以通过在一些子网站上对各种核心样式表进行更改来哼唱。显然,如果原始开发人员有一些远见,他们只需要包含一个主样式表并覆盖必要的元素......

我首先开始使用comm认为它可以解决这个问题,但很快发现它需要接收一个已排序的输入文件。

然后我切换到diff并通过一些阅读和research得到了以下内容:

diff --unchanged-group-format="@@ %dn,%df%c'\012'%<" --old-group-format='' --new-group-format='' --changed-group-format='' file_1.css file_2.css

前一个显然几乎存在,但是:

A)我需要查看@@行(这应该没问题,对吧?乍一看,这看起来是正确的,但是diff会抛出任何其他行意外的线条需要被拉扯?)然后

B)我需要再创建两个文件,首先是file_1.css中剩余的唯一行,然后是file_2.css的剩余唯一行。

显然,第一个“共同”文件将进入一个包含文件夹,然后作为@import url("common.css");

包含在后两个创建的文件中

我认为以下简单的更改将创建我所指的后两个文件:

diff --unchanged-group-format='' --old-group-format="@@ %dn,%df%c'\012'%<" --new-group-format='' --changed-group-format='' file_1.css file_2.css

diff --unchanged-group-format='' --old-group-format='' --new-group-format="@@ %dn,%df%c'\012'%<" file_1.css file_2.css

示例文件:

  

文件1:https://gist.github.com/c13843972c47b5037704

     

文件2:https://gist.github.com/fff39eae386e8969dc10

例如,在执行以下测试时:

diff --unchanged-group-format="@@ %dn,%df%c'\012'%<" --old-group-format='' --new-group-format=''   --changed-group-format='' file_1.css file_2.css | egrep -v "^@@\d*" > common.css

diff --unchanged-group-format='' --old-group-format="@@ %dn,%df%c'\012'%<" --new-group-format=''   --changed-group-format='' file_1.css file_2.css | egrep -v "^@@\d*" > old.css

然后使用body搜索egrep "^body" *csscommon.css只生成一个正文,而old.css只生成一个正文,而它显示file_1.css中有两个不同的条目{1}}和file_2.css。显然这种方法存在缺陷。

如何创建最终成为常见包含和覆盖文件的这两个文件?

1 个答案:

答案 0 :(得分:0)

@ylluminate,您有几个选择:

  1. 使用BeyondCompare直观地验证差异。它在比较类似文件方面做得很棒。它允许保存公共线/仅左线/右线。唯一的缺点是它是交互式的,如果你有很多文件,需要一些时间。从积极的方面来看,您似乎希望首先通过测试几次来建立信任。
  2. 为--changed-group-format添加格式文本并捕获修改后的代码(以及现在命令执行的旧代码)。您需要再运行一次比较以获取新代码中的内容,而不是旧代码中的内容。这里的缺点是验证会很困难。
  3. 保存数据库表中的所有行并比较列是另一种选择。注意存储新旧行号。缺点是数据线必须是唯一的,空白线将被切断。
  4. 如果我的文件少于50个,我会选择选项1。

    希望这有帮助。

    PS:我与BeyondCompare没有任何联系。只是一个快乐的软件用户