繁体   English   中英

带通配符的grep

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM