【发布时间】:2021-02-13 07:48:34
【问题描述】:
我正在尝试显示以下包含 IP 地址的输入文件。我想显示字符串之间的完全匹配,如示例所示,但似乎没有成功。这里的演示是一个名为 input.txt 的文本文件中的示例数据:
1. IP [1.1.1.1]
2. IP [1.1.1.11]
3. IP [1.1.1.115]
4. IP "1.1.1.1 "
5. IP "1.1.1.11 "
6. IP "1.1.1.115"
7. IP U*@K1.1.1.1-I(M@
8. IP *JJ1.1.1.11()
9. IP *J@K1.1.1.115U*@
10. IP U#@I1.1.1.19lds
那么,假设我要找到这个IP:1.1.1.1,我会写如下代码:
grep -w '1.1.1.1' input.txt
这样我得到了以下输出:
1. IP [1.1.1.1]
4. IP "1.1.1.1 "
但预期的输出是,第 7 行也应该显示,因为它包含一个随机字符串之间的1.1.1.1 的 IP。所以预期的输出应该是这样的:
1. IP [1.1.1.1]
4. IP "1.1.1.1 "
7. IP U*@K1.1.1.1-I(M@
现在假设我想找到这个字符串:1.1.1:
grep -w '1.1.1' input.txt
我得到以下输出:
1. IP [1.1.1.1]
2. IP [1.1.1.11]
3. IP [1.1.1.115]
4. IP "1.1.1.1 "
5. IP "1.1.1.11 "
6. IP "1.1.1.115"
7. IP U*@K1.1.1.1-I(M@
预期的输出是,它不应该返回任何内容,因为整个字符串 1.1.1 不在 input.txt 内。
grep 能做到这一点吗?
【问题讨论】:
-
是的,它只是从第一行到第七行显示相同的意外输出。 @blurfus
-
grep "\<1.1.1\>" input.txt也输出相同的结果第 1 行直到第 7 行 -
我对这个问题感到困惑。您希望
IP U*@K1.1.1.1-I(M@与1.1.1.1匹配,即使它不完全是一个单词(即K1),但是您希望没有任何东西与1.1.1匹配相同的输入? - 同样的K1场景呢? -
如果输入有这个:
1.1.1-2它应该显示,因为 1.1.1 在那里。但如果输出是这个1.1.1.3,它不应该显示。简而言之,如果在该字符串 1.1.1 之后出现一个点或一个数字,则它是无效的。也许这就是他的意思。 -
@blurfus IP 应该在随机字符串之间匹配。随机字符串之间的有效 IP 示例是
UIO@#J1.1.1.1J@或*JKJHH9.1.3.2{}@PO或xjk29)192.111.22.3p或在真实日志文件中:http://1.2.3.4/test?ok或http://local/match.php?&abc=1.2.2.2&a