css - 如何将 `diff`文件创建一个 "common"文件?

标签 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) 我需要 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

示例文件:

file 1: https://gist.github.com/c13843972c47b5037704

file 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

然后用 egrep "^body"*css 搜索 body ,它只在 common.css 中产生一个 body 而在old.css,而它显示在 file_1.cssfile_2.css 中有两个不同的条目。很明显,这种方法是有缺陷的。

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

最佳答案

@ylluminate,你有几个选择:

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

如果我的文件少于 50 个,我会选择选项 1。

希望这对您有所帮助。

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

关于css - 如何将 `diff`文件创建一个 "common"文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19151848/

相关文章:

git - 致命: This operation must be run in a work tree on pre-receive hook

python - Scrapy 似乎已安装但在 python shell 中时无法导入

css - 我如何在 Vue.js 中导入 css?

html - Bootstrap 导航栏不适用于移动设备

bash - Git Alias - 带有分支名称的 git commit

linux - 15 分钟后将更新的文件从一台服务器复制到另一台服务器

linux - gcloud 实例磁盘空间

html - 创建 css3 特定形状

javascript - 寻找下一个 div

linux - 从一个文件测试多个服务器的 telnet 连接