the*_*heG 3 bash grep wildcard
使用 grep 进行通配符搜索
我有一个包含许多 IP 地址的文件。我想列出文件中的所有 IP 地址,并使用了带有模式 192.16* 的 grep,但它没有显示 IP 地址的整个列表。仅当使用句点后跟星号符号时,我才能列出整个 IP 地址。所以我的疑问是为什么第二个选项不起作用但第三个选项工作正常。
root@test:~/test# cat z
192.168.1.0
192.168.2.0
192.168.110.7
192.168.115.5
1. root@test:~/test# grep -o 192.1 z
192.1
192.1
192.1
192.1
2. root@test:~/test# grep -o 192.1* z
192.1
192.1
192.1
192.1
3. root@test:~/test# grep -o 192.1. z
192.16
192.16
192.16
192.16
4. root@test:~/test# grep -o 192.1.* z
192.168.1.0
192.168.2.0
192.168.110.7
192.168.115.5
Run Code Online (Sandbox Code Playgroud)
点 ( .) 匹配任何字符,您必须对其进行转义:\.。
-o仅显示匹配部分,如果您.*从末尾省略(=任何字符),它将省略该行的其余部分(因为它不是匹配字符串的一部分)。
.*可以匹配比您需要的更多的内容(它将匹配该行的其余部分),更愿意明确说明您允许的内容:[0-9.]*。
确保将搜索表达式放在单引号中'192.168\.[0-9.]*',否则 shell 将解释特殊字符,并用匹配的文件名替换表达式(幸运的是,您没有任何匹配的文件名)。
您可能只想搜索单词 ( -w)。如果您想确保只匹配 IP 地址而不是与其相似的内容(没有连续的点,正好 4 位数字,<=255...),那么您将需要更复杂的表达式。