Find

查找兩個文件中共有的一組字元串

  • March 1, 2011

我過去使用過 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 或類似的東西輕鬆完成嗎?

這將顯示大文件中與列表中的行匹配的行。

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

首先,對兩個文件進行排序。

`sort list > list-sorted

sort config > config-sorted`

要查看列表和配置文件中的行,請執行

comm -1 -2 list-sorted config-sorted

要查看列表中不在配置文件中的行,請執行

comm -2 -3 list-sorted config-sorted

引用自:https://serverfault.com/questions/241476