我有以下文件:
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支持吗?
答案 0 :(得分:2)
^[A-Za-z0-9]\{1,10\}:[A-Za-z0-9]\{1,10\}$
您需要escape the braces,否则它们会匹配实际大括号。 这就是你什么都没有的原因。
正如我在评论中提到的,我假设你想在冒号的两边至少有一个字符,所以我做了相应的调整。
为避免匹配Z
和a
之间的非字母数字字符,我更改了字符类的定义。
答案 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之后}}
答案 3 :(得分:0)
只需使用grep -E
,我会将范围替换为[[:alnum:]]
,这样您就不会因为语言环境而遇到麻烦。此外,我认为您将寻找1,
而不是0,
grep -E '^[[:alnum:]]{1,10}:[[:alnum:]]{1,10}$' file
或
grep '^[[:alnum:]]\{1,10\}:[[:alnum:]]\{1,10\}$' file