gpt4 book ai didi

linux - 删除包含在另一个文件中任何位置找到的模式的行

转载 作者:太空宇宙 更新时间:2023-11-04 10:13:13 31 4
gpt4 key购买 nike

我想比较两个文件并删除 file1 中的行,如果它们包含在 file2 中的任何位置找到的模式。我进行了一些搜索,我能找到的最接近的答案是如何删除出现在另一个文件中的行。

如果可能的话,我想要一个简单的 grep、awk、sed 等等。我正在匹配 IP 地址,如下所示。

文件1

10.10.50.1 00:00:10:23 0000.0012.3456 Vlan1
10.10.50.2 00:00:12:34 1234.56AB.CDEF Vlan2
10.10.50.3 00:00:23:10 ABCD.EF12.345 Vlan3billion

文件2

these-are some_words 10.10.50.2 andmaybe some-other words
theseare somewords 10.10.50.99 and-maybe some_other words

预期输出:

10.10.50.1 00:00:10:23 0000.0012.3456 Vlan1
10.10.50.3 00:00:23:10 ABCD.EF12.345 Vlan3billion

最佳答案

如果我没理解错的话您希望从第一个文件中排除与第二个文件中的任何 IP 地址匹配的行。

这个简单且公认有点懒惰的解决方案可能足以满足您的目的:

grep -v file1 -Fwf <(awk '{ print $3 }' file2)

Awk 提取带有 IP 地址的第 3 列,grep 将使用这些作为固定模式 (-F) 并且只匹配完整的单词 (-w)。

如果 IP 地址不总是第 3 列,然后你可以通过使用 grep 的模式匹配来提取它们,作为@tripleee建议:

grep -v file1 -Fwf <(grep -owE '[1-9][0-9](\.[0-9]{1,3}){3}' file2)

关于linux - 删除包含在另一个文件中任何位置找到的模式的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47703369/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com