为什么grep -wf返回不同的结果然后grep -w“line1”

时间:2017-07-06 18:19:29

标签: grep

我正在尝试学习如何使用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

1 个答案:

答案 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