我有两个文件。第一个是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。我想这将是一个循环来搜索每一行,但我不知道该怎么做。
此功能内置于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
。