Regex 如何对包含多个范围且至少出现一次的正则表达式进行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(但它不匹配,因为+与您正在

根据以下输入,我正在尝试对至少以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(但它不匹配,因为
+
与您正在使用的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
    9
    的数字(所有ASCII数字)
  • \{3\}
    /
    {3}
    -BRE/ERE范围量词要求量化子模式出现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
都不支持范围量词。我在回答中加了一个便条。