首页 > 解决方案 > 文件之间的文件比较

问题描述

我计划为我的 JVM 和文件系统的前后健康检查构建一个脚本,我想比较 2 个文件 pre.txt 和 post.txt 并想忽略 file1 和 file2 中的常见行只显示什么这些行存在于 pre.txt 除了 common 作为文件 final.txt 。

使用 comm 命令但不工作 例如:--

pre.txt

Filesystem      Size  Used Avail Use% Mounted on
udev            966M     0  966M   0% /dev
tmpfs           200M  1.2M  199M   1% /run
/dev/sda2        20G  6.1G   13G  33% /
tmpfs           997M     0  997M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           997M     0  997M   0% /sys/fs/cgroup
/dev/loop1       90M   90M     0 100% /snap/core/8268
/dev/loop2       94M   94M     0 100% /snap/core/9066
tmpfs           200M     0  200M   0% /run/user/1000

post.txt

/dev/loop1       90M   90M     0 100% /snap/core/8268
/dev/loop2       94M   94M     0 100% /snap/core/9066

最终的.txt

Filesystem      Size  Used Avail Use% Mounted on
udev            966M     0  966M   0% /dev
tmpfs           200M  1.2M  199M   1% /run
/dev/sda2        20G  6.1G   13G  33% /
tmpfs           997M     0  997M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           997M     0  997M   0% /sys/fs/cgroup
tmpfs           200M     0  200M   0% /run/user/1000

标签: linuxbashshell

解决方案


您可以使用 grep 排除以下行post.txt

$ grep -vxFf post.txt pre.txt 
Filesystem      Size  Used Avail Use% Mounted on
udev            966M     0  966M   0% /dev
tmpfs           200M  1.2M  199M   1% /run
/dev/sda2        20G  6.1G   13G  33% /
tmpfs           997M     0  997M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           997M     0  997M   0% /sys/fs/cgroup
tmpfs           200M     0  200M   0% /run/user/1000
  • -v: 反转 grep 的匹配行为以排除匹配行
  • -x: 只匹配整行
  • -F: 将模式解释为文字字符串而不是正则表达式
  • -f: 指定一个文件 ( post.txt) 包含要匹配的模式

推荐阅读