Regex 如何对包含多个范围且至少出现一次的正则表达式进行grep
根据以下输入,我正在尝试对至少以e位开头的行进行grep:Regex 如何对包含多个范围且至少出现一次的正则表达式进行grep,regex,bash,Regex,Bash,根据以下输入,我正在尝试对至少以e位开头的行进行grep: 7.3M ./user1 7.3M ./user2 770M ./user3 78M ./user4 737M ./user5 7.6M ./user6 我的grep命令不起作用: grep ^[0-9]+[0-9]+[0-9]+M 我不明白为什么 您的正则表达式,^[0-9]+[0-9]+[0-9]+[0-9]+M,将匹配字符串(^)的开头,然后匹配1+diigts(但它不匹配,因为+与您正在
7.3M ./user1
7.3M ./user2
770M ./user3
78M ./user4
737M ./user5
7.6M ./user6
我的grep命令不起作用:
grep ^[0-9]+[0-9]+[0-9]+M
我不明白为什么 您的正则表达式,
^[0-9]+[0-9]+[0-9]+[0-9]+M
,将匹配字符串(^
)的开头,然后匹配1+diigts(但它不匹配,因为+
与您正在使用的POSIX BRE不兼容,因为没有-E
或-p
选项),然后再匹配1+个数字两次和-M
。如果使用grep-E'^[0-9]+[0-9]+[0-9]+M'
,它将匹配123M….
或12222234421112M….
您可以使用以下POSIX BRE兼容正则表达式:
grep '^[0-9]\{3\}'
grep -E '^[0-9]{3}'
或POSIX ERE兼容正则表达式:
grep '^[0-9]\{3\}'
grep -E '^[0-9]{3}'
详细信息
-字符串/行的开头^
-从[0-9]
到0
的数字(所有ASCII数字)9
/\{3\}
-BRE/ERE范围量词要求量化子模式出现3次{3}
注意:在Sun OS上,
grep
不支持范围量词,因此您必须在那里使用类似^[0-9][0-9][0-9]
的拼写模式。它还将与其他可能不完全支持所有正则表达式量词的工具配合使用。只需grep for“^[0-9][0-9][0-9]”
您从哪里获得数据的?从du
?许多工具都有过滤功能,只能在特定的标准下输出,例如大小>100毫米。还有一点很好:)@Ben如果是这种情况,这是正确的选择。有时grep
适用于您当前的跑步,但它不是100%安全稳定的,将来可能会让您大吃一惊。特别是对于那些CMD,Frank和Kent是对的,有时甚至连grep
都不支持范围量词。我在回答中加了一个便条。