Grep Regex的行为不符合预期

Grep Regex的行为不符合预期,regex,grep,Regex,Grep,我有以下文件: this:that thisthat this that this: :that aa:bb 13a:59b a4:b6 thisentryistoolongtomatchthepattern:1234567abcderfslsfl 4df)#(*:049 我只想匹配以下条目: this:that aa:bb 13a:59b a4:b6 我正试图grep出只包含[少于10个字母数字字符]:[少于10个字母数字字符]的条目。我尝试了以下表达式:^[A-z0-9]{0,10}:[

我有以下文件:

this:that
thisthat
this that
this:
:that
aa:bb
13a:59b
a4:b6
thisentryistoolongtomatchthepattern:1234567abcderfslsfl
4df)#(*:049
我只想匹配以下条目:

this:that
aa:bb
13a:59b
a4:b6
我正试图grep出只包含[少于10个字母数字字符]:[少于10个字母数字字符]的条目。我尝试了以下表达式:
^[A-z0-9]{0,10}:[A-z0-9]{0,10}$
。但是,这与任何内容都不匹配。grep是否不支持此表达式中的某些内容?

如何:

grep -P '^[A-z0-9]{0,10}:[A-z0-9]{0,10}$' in.txt
输出:

this:that
this:
:that
aa:bb
13a:59b
a4:b6
如果你不想要
这个:
或者
:那个
,把
{0,10}
改成
{1,10}

此外,您应该使用
[a-zA-Z0-9]
而不是
[a-Z0-9]

如何:

grep -P '^[A-z0-9]{0,10}:[A-z0-9]{0,10}$' in.txt
输出:

this:that
this:
:that
aa:bb
13a:59b
a4:b6
如果你不想要
这个:
或者
:那个
,把
{0,10}
改成
{1,10}

此外,您应该使用
[a-zA-Z0-9]
而不是
[a-Z0-9]
^[a-zA-Z0-9]\{1,10\}:[a-zA-Z0-9]\{1,10\}$
  • 你会想要的,否则他们会匹配实际的大括号这就是你一无所获的原因。

  • 正如我在评论中所指出的,我假设您希望冒号两边至少有一个字符,所以我相应地进行了调整

  • 为了避免匹配位于
    Z
    a
    之间的非字母数字字符,我更改了字符类的定义

^[A-Za-z0-9]\{1,10\}:[A-Za-z0-9]\{1,10\}$
  • 你会想要的,否则他们会匹配实际的大括号这就是你一无所获的原因。

  • 正如我在评论中所指出的,我假设您希望冒号两边至少有一个字符,所以我相应地进行了调整

  • 为了避免匹配位于
    Z
    a
    之间的非字母数字字符,我更改了字符类的定义


刚刚修改了一点正则表达式,希望这能有所帮助

\b[A-z0-9]{1,10}:[A-z0-9]{1,10}/g
根据您的正则表达式,
^
将位于匹配字符串的开头,即“this:that”之前,
$
将位于整个字符串的末尾,即
4df)之后。#(*:049


只是对正则表达式做了一些修改,希望这能有所帮助

\b[A-z0-9]{1,10}:[A-z0-9]{1,10}/g
根据您的正则表达式,
^
将位于匹配字符串的开头,即“this:that”之前,
$
将位于整个字符串的末尾,即
4df)之后。#(*:049


只需使用
grep-E
,我会用
[:alnum:][]
替换范围,这样您就不会因为区域设置而遇到麻烦。此外,我认为您会寻找
1,
而不是
0,

grep -E '^[[:alnum:]]{1,10}:[[:alnum:]]{1,10}$' file


只要使用
grep-E
,我就会用
[[:alnum:]
替换范围,这样您就不会因为区域设置而遇到麻烦。另外,我认为您会寻找
1,
而不是
0,

grep -E '^[[:alnum:]]{1,10}:[[:alnum:]]{1,10}$' file


无论grep使用哪种方言,我想你都希望
^[A-z0-9]{1,10}:[A-z0-9]{1,10}$
,除非你想
这个:
:那个
匹配。所以你想要那些字母数字字符计数与grep使用的方言无关的行,我想你想要
^[A-z0-9]{1,10}:[A-z0-9]{1,10}$
除非您希望
this:
:that
匹配。因此您希望字母数字字符数为的行我建议在您的答案中添加修改的表达式(使用[a-zA-Z0-9])。或者另一个选项是将-I选项指定给grep并使用[a-Z\d]。我建议添加修改的表达式(使用[a-zA-Z0-9])[a-zA-Z0-9])。或者另一个选项是将-i选项指定给grep并使用[a-Z\d]。