[英]grep with wildcard symbols
使用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
点( .
)可以匹配任何字符,您必须对其进行转义: \\.
。
-o
仅显示匹配的部分,如果从末尾省略.*
(=任何字符),它将省略该行的其余部分(因为它不是匹配字符串的一部分)。
.*
可以比您需要的匹配更多(它将匹配该行的其余部分),更喜欢明确地说出您允许的内容: [0-9.]*
。
确保将搜索表达式放在单引号'192.168\\.[0-9.]*'
,否则外壳程序将解释特殊字符,并用匹配的文件名替换表达式(幸运的是,您没有任何匹配的文件名)。
您可能只想搜索单词( -w
)。 如果要确保只匹配IP地址,而不匹配类似的地址(没有连续的点,正好是4位数字,<= 255 ...),那么您将需要更复杂的表达式。
为什么您的命令不起作用:
1. root@test:~/test# grep -o 192.1 z
由于-o
开关,将仅匹配192<any char>1
,并且仅打印匹配的部分。
2. root@test:~/test# grep -o 192.1* z
仅匹配192<any char>
, 192<any char>1
192<any char>11
192<any char>111
等,并且由于-o
开关,仅打印匹配的部分。 您的输入不包含任何有区别的数据。
3. root@test:~/test# grep -o 192.1. z
仅匹配192<any char>1<any char>
,并且由于-o
开关,仅打印匹配的部分。 这样可以再给您一个字符( .
代表“任何”单个字符)。
4. root@test:~/test# grep -o 192.1.* z
任何以192<any char>1
开头的行都将被匹配,并且由于-o
开关,将仅打印匹配的部分。 .*
匹配直到行尾的所有内容,包括空字符串。
IP地址的正则表达式
您可以在网上找到很多IP地址正则表达式,例如,请参阅此StackOverflow问题 。 但是请注意,某些表达式仅用于匹配IP地址,因此包含开始( ^
)和行尾( $
)字符。 如果您输入的内容不只是地址,则必须删除这些地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.