搜索一个文件以查看它是否包含另一文件的信息

new*_*020 2 scripting files

我有两个文件。第一个是unip.txt,第二个是ipex.txt,每个文件都包含 IP 地址。

unip.txt:

49.235.113.205
50.115.166.136
51.15.70.104
51.15.87.74
51.15.134.103
146.148.13.9
148.70.23.131
148.72.212.161
148.216.29.46
149.56.141.193
Run Code Online (Sandbox Code Playgroud)

ipex.txt:

51.15.134.103
148.70.23.131
151.141.0.0
97.89.32.238
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚如何基本上搜索该unip.txt文件以查看它是否包含该ipex.txt文件中的任何 IP。我想这将是一个循环来搜索每一行,但我不知道该怎么做。

ber*_*sch 5

此功能内置于grep. 使用-f选项:

grep -Fx -f ipex.txt unip.txt
Run Code Online (Sandbox Code Playgroud)

这将打印所有匹配项。如果您只对是/否答案感兴趣,请使用选项-q(“安静”):

if grep -Fxq -x -f ipex.txt unip.txt; then
    echo unip.txt contains IP addresses from ipex.txt
else
    echo "unip.txt doesn't contain IP addresses from ipex.txt"
fi
Run Code Online (Sandbox Code Playgroud)

为什么-F?默认情况下,grep 将 in 中的行解释ipex.txt为正则表达式,并且这些行中的点具有“任何字符”的含义。这可能(并且可能会)导致错误匹配。-F确保匹配常量字符串,而不是正则表达式。

为什么-x?它确保 IP 地址与 中的整行匹配unip.txt,从而防止部分匹配,例如防止49.235.113.20匹配地址49.235.113.205