2017-09-21 37 views
1

考虑下面的输入我试图到grep用于与至少你数字开始行正则表达式:我如何可以grep,对于包含多个范围的至少一个occurence

7.3M ./user1 
7.3M ./user2 
770M ./user3 
78M  ./user4 
737M ./user5 
7.6M ./user6 

我的grep命令是不工作:

grep ^[0-9]+[0-9]+[0-9]+M 

我不明白为什么不幸。

+2

只是grep为'“^ [0-9] [0-9] [0-9]”' –

+0

你从哪里得到的数据?从'du'?许多工具具有仅在某些标准中输出的过滤特征,例如,大小> 100M – Kent

+0

也好点:) – Ben

回答

1

您正则表达式,^[0-9]+[0-9]+[0-9]+M匹配的字符串(^)开始,然后1+ diigts(但事实并非如此,因为+是不是与您正在使用,因为没有-E也不-P选项POSIX兼容BRE ),然后再次1+数字两次和M。如果您使用grep -E '^[0-9]+[0-9]+[0-9]+M',它会匹配123M....12222234421112M....之类的字符串。

您可以使用下面的POSIX BRE兼容的正则表达式:

grep '^[0-9]\{3\}' 

还是一个POSIX ERE兼容的正则表达式:

grep -E '^[0-9]{3}' 

详细

  • ^ - 一个字符串的开始/ line
  • [0-9] - 从09(所有ASCII数字)一个数字
  • \{3\}/{3} - BRE/ERE范围量词要求3次出现的量化子模式。

注意:在Sun OS,grep不支持范围量词,所以你将不得不使用@FrankNeblung's suggestion那里,阐述了格式,如:^[0-9][0-9][0-9]。它还将与其他可能没有全面支持所有正则表达量的工具一起使用。

相关问题