我想比较两个文件并删除 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/