我正在尝试学习如何使用grep而我无法弄清楚为什么当我使用一个字符串grep一组文件时我得不到相同的结果当我使用相同的文件时确切的字符串?
在我的主目录中:
[匹配/ strings.txt]
1\.1\.1\.1
2\.2\.2\.2
- strings.txt包含。 [dot]转义没有前导或尾随空格的IP
[IPS1,IPS2,IPS3,ips4]
... massive lists of id's and ip's ...
1234 1.1.2.3
1222 1.1.2.4
当我跑步时:
$ grep -w "1\.1\.1\.1" ips*
我每次都获得100%正确的匹配。 ips1:1111 1.1.1.1 ips2:1111 1.1.1.1
当我跑步时:
$ grep -wf matches/strings.txt ips*
我收到了正确和错误匹配的混合包 ips1:1112 1.1.1.2 ips1:5111 1.1.1.1 ips1:1511 5.1.1.1
我不知道我是不是只是使用了错误的工具来做这件事,或者我只是没有使用正确的选项。我也试过这些选项:
grep -Ff grep -wFf grep -wHFf
这些都没有给我与grep -w“1.1.1.1”相同的结果,我已经尝试在我的strings.txt文件中放置ip的引号,这没有任何区别我得到相同的混合包正确和不正确火柴。我也尝试过只匹配一个文件,而不是同时匹配所有ips *,我得到了同样的混合结果。
以下是一些添加了额外换行符的真实数据......真正的strings.txt在点转义IP之间没有空行,只是花了很长时间才能将其格式化以便正确显示。
grep -wf match / strings.txt ips * |更
ips1:0 100.0.109.83
ips1:0 100.10.42.110
ips1:0 100.1.100.194
ips1:0 100.1.111.51
d:〜$ cat match / strings.txt
“100 \ 0.4 \ 0.144 \ 0.28”
“205 \ 0.154 \ 0.246 \ 0.79”
“172 \ 0.58 \ 0.23 \ 0.203”
“172 \ 0.58 \ 0.21 \ 0.242”
“172 \ 0.58 \ 0.21 \ 0.186”
“172 \ 0.58 \ 0.23 \ .212”
“172 \ 0.58 \ 0.21 \ 0.32”
“104 \ 0.174 \ 0.15 \ 0.38”
“67 \ 0.87 \ 0.1 \ 0.146”
“128 \ 0.177 \ 0.161 \ 0.177”
“172 \ 0.58 \ 0.21 \ 0.228”
“172 \ 0.58 \ 0.23 \ 0.19”
“172 \ 0.56 \ 0.38 \ 0.234”
“173 \ 0.46 \ 0.78 \ 0.139”
“100 \ 0.4 \ 0.149 \ 0.40”
“107 \ 0.195 \ 0.45 \ .250”
“205 \ 0.197 \ 0.242 \ 0.184”
“128 \ 0.177 \ 0.161 \ 0.161”
在strings.txt
中没有任何引号〜$ grep -wf match / strings.txt ips * |更多 ips1:0 100.34.7.21
ips1:0 100.35.114.199
ips1:0 100.35.148.65
ips1:0 100.35.161.40
ips1:0 100.35.195.180
ips1:0 100.35.211.106
ips1:0 100.35.216.172
:〜$ cat match / strings.txt
100 \ 0.4 \ 0.144 \ 0.28
205 \ 0.154 \ 0.246 \ 0.79
172 \ 0.58 \ 0.23 \ 0.203
172 \ 0.58 \ 0.21 \ 0.242
172 \ 0.58 \ 0.21 \ 0.186
172 \ 0.58 \ 0.23 \ .212
172 \ 0.58 \ 0.21 \ 0.32
104 \ 0.174 \ 0.15 \ 0.38
67 \ 0.87 \ 0.1 \ 0.146
128 \ 0.177 \ 0.161 \ 0.177
172 \ 0.58 \ 0.21 \ 0.228
172 \ 0.58 \ 0.23 \ 0.19
172 \ 0.56 \ 0.38 \ 0.234
173 \ 0.46 \ 0.78 \ 0.139
100 \ 0.4 \ 0.149 \ 0.40
107 \ 0.195 \ 0.45 \ 0.250
205 \ 0.197 \ 0.242 \ 0.184
128 \ 0.177 \ 0.161 \ 0.161
以下是来自ips1的实际数据示例(添加了额外的换行符):
0 100.0.109.83
0 100.10.42.110
0 100.1.100.194
0 100.1.111.51
0 100.1.138.93
0 100.1.149.82
0 100.11.60.70
0 100.1.187.63
0 100.12.159.242
0 100.12.184.253
0 100.12.190.121
0 100.12.202.213
0 100.12.204.57
0 100.12.223.81
0 100.12.229.63
0 100.12.242.176
0 100.1.227.10
0 100.12.46.230
0 100.12.50.64
0 100.12.71.66
0 100.1.38.139
从该文件中删除所有内容并一次添加一行修复了该问题。我不确定为什么从Excel文档中复制和粘贴引起的奇怪可能是我最好的猜测。
:〜$ grep -w“100 \ .4 \ .144 \ .28”ips * | wc -l </ p>
11
〜$ grep -wf match / strings.txt ips * | wc -l </ p>
11
$ grep -wf match / strings.txt ips * | wc -l </ p>
29
$ grep -w“107 \ .195 \ .45 \ .250”ips * | wc -l </ p>
18
$ grep -wf match / strings.txt ips * | wc -l </ p>
37
$ grep -w“172 \ .58 \ .23 \ .19”ips * | wc -l </ p>
8
答案 0 :(得分:1)
您确定您的文件包含您认为的文件吗?我刚试了一下。我拥有什么和拥有什么有什么不同?
$ cat strings.txt
1\.1\.1\.1
$ cat ips.txt
1111 1.1.1.1
2222 2.2.2.2
1112 1.1.1.2
2221 2.2.2.1
1111b 1.1.1.1
2222b 2.2.2.2
$ grep -w "1\.1\.1\.1" ips*
1111 1.1.1.1
1111b 1.1.1.1
$ grep -wf strings.txt ips*
1111 1.1.1.1
1111b 1.1.1.1