找到两个文件中共同的一组字符串

找到两个文件中共同的一组字符串

我以前使用过 diff 命令。我遇到过一种我不知道的情况,这里有一些文本字符串(可以存储在文件中)

CONFIG_XEN=y
CONFIG_XEN_PVHVM=y
CONFIG_XEN_MAX_DOMAIN_MEMORY=128
CONFIG_XEN_SAVE_RESTORE=y
CONFIG_XEN_DEBUG_FS=y
CONFIG_SWIOTLB_XEN=y
CONFIG_MICROCODE_XEN=y
CONFIG_XEN_DOM0=y
CONFIG_XEN_PRIVILEGED_GUEST=y
CONFIG_XEN_DOM0_PCI=y
CONFIG_XEN_PCI_PASSTHROUGH=y
CONFIG_PCI_XEN=y
CONFIG_XEN_PCIDEV_FRONTEND=y
CONFIG_XEN_BLKDEV_FRONTEND=y
CONFIG_NETXEN_NIC=m
CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_KBDDEV_FRONTEND=y
CONFIG_HVC_XEN=y
CONFIG_XEN_FBDEV_FRONTEND=y
CONFIG_XEN_BALLOON=y
CONFIG_XEN_SCRUB_PAGES=y
CONFIG_XEN_DEV_EVTCHN=y
CONFIG_XEN_BACKEND=y
CONFIG_XEN_NETDEV_BACKEND=m
CONFIG_XEN_BLKDEV_BACKEND=m
CONFIG_XEN_BLKDEV_TAP=m
CONFIG_XEN_BLKBACK_PAGEMAP=m
CONFIG_XEN_PCIDEV_BACKEND=m
CONFIG_XEN_PCIDEV_BACKEND_VPCI=y
CONFIG_XENFS=y
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_MCE=y
CONFIG_XEN_XENBUS_FRONTEND=y
CONFIG_XEN_GNTDEV=y
CONFIG_XEN_S3=y
CONFIG_ACPI_PROCESSOR_XEN=y
CONFIG_XEN_PLATFORM_PCI=m

我基本上只需要在内核的 .config 文件中找到上述字符串(而不是任何其他字符串),如下所示

http://pastebin.com/AEQ6p9Vm 这是一个非常大的文件。

现在我不知道是否可以通过命令找到我首先提到的条目是否存在于第二个文件中,所以我手动复制了每个条目并在我提到的 .config 中搜索。我发现

存在以下差异

 # CONFIG_XEN_DEBUG_FS is not set CONFIG_XEN_BLKBACK_PAGEMAP <--- is
 completely missing
 # CONFIG_XEN_NETDEV_BACKEND is not set
 # CONFIG_XEN_BLKDEV_BACKEND is not set
 # CONFIG_XEN_BLKDEV_TAP is not set CONFIG_XENFS=y
 # CONFIG_XEN_GNTDEV is not set

这可以通过 find grep 或者类似的东西轻松完成吗?

答案1

这将显示大文件中与列表中的行匹配的行。

grep -Ff string-list-file very-big-file

答案2

首先,对你的两个文件进行排序。

sort list > list-sorted
sort config > config-sorted

要查看列表和配置文件中的行,请运行

comm -1 -2 list-sorted config-sorted

要查看列表中不存在于配置文件中的行,请运行

comm -2 -3 list-sorted config-sorted

相关内容