Grep正则表达不符合预期

时间:2014-03-06 14:34:04

标签: 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

我试图只查看包含[少于10个字母数字字符]的条目:[少于10个字母数字字符]。我尝试了以下表达式:^[A-z0-9]{0,10}:[A-z0-9]{0,10}$。但是,这与任何事情都不相符。这个表达式中有什么东西不受grep支持吗?

4 个答案:

答案 0 :(得分:2)

^[A-Za-z0-9]\{1,10\}:[A-Za-z0-9]\{1,10\}$
  • 您需要escape the braces,否则它们会匹配实际大括号。 这就是你什么都没有的原因。

  • 正如我在评论中提到的,我假设你想在冒号的两边至少有一个字符,所以我做了相应的调整。

  • 为避免匹配Za之间的非字母数字字符,我更改了字符类的定义。

答案 1 :(得分:1)

怎么样:

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

<强>输出:

this:that
this:
:that
aa:bb
13a:59b
a4:b6

如果您不想this::that,请将{0,10}更改为{1,10}

此外,您应该使用[a-zA-Z0-9]代替[A-z0-9]

答案 2 :(得分:1)

刚刚修改了你的正则表达式,希望这有帮助

\b[A-z0-9]{1,10}:[A-z0-9]{1,10}/g

根据你的正则表达式^将假设在匹配字符串的开头位置,即在“this:that”之前,$将在整个字符串的末尾,即在{{1之后}}

http://regex101.com/r/rN7hQ2

答案 3 :(得分:0)

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

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

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