我有大量的 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) 我需要 grep 出 @@
行(这应该没问题,对吧?乍一看这似乎是正确的,但是 diff
抛出任何其他需要删除的意外行?)然后
B) 我需要再创建两个文件,第一个是 file_1.css 中剩余的唯一行,然后是 file_2.css 中剩余的唯一行。
显然,第一个“公共(public)”文件将进入包含文件夹,然后作为 @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
示例文件:
例如,在执行以下测试时:
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
然后用 egrep "^body"*css
搜索 body
,它只在 common.css
中产生一个 body 而在old.css
,而它显示在 file_1.css
和 file_2.css
中有两个不同的条目。很明显,这种方法是有缺陷的。
如何创建这两个最终成为通用包含文件和覆盖文件的文件?
最佳答案
@ylluminate,你有几个选择:
- 使用 BeyondCompare 直观地验证差异。它在比较相似文件方面做得非常出色。它允许保存公共(public)线/仅左侧线/右侧线。唯一的缺点是它是交互式的,如果您有很多文件,则需要一些时间。从积极的方面来看,您似乎想先通过测试几次来建立信任。
- 为 --changed-group-format 添加格式文本并捕获修改后的代码(以及您的命令现在执行的旧代码)。您需要再运行一次比较才能获得新代码中的内容,而不是旧代码中的内容。这里的缺点是验证会很困难。
- 保存数据库表中的所有行并比较列是另一种选择。注意存储新旧行号。缺点是数据行需要是唯一的,空行会被切掉。
如果我的文件少于 50 个,我会选择选项 1。
希望这对您有所帮助。
PS:我与 BeyondCompare 没有任何关联。只是该软件的快乐用户
关于css - 如何将 `diff`文件创建一个 "common"文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19151848/