Linux grep只有n,m个string

我有一个文件里面有下面的内容,

TESTING TSET24D DSWEDFBG WTSETO MSDWEHLKGY 

并希望grepstring只有6和8个字符长。

我试了下面的一个,

 [root@server ~]# cat listfile | grep -o -w -E '^[[:alnum:]]{6,8}' TESTING TSET24D DSWEDFBG WTSETO [root@server ~]# 

这似乎在一些服务器上工作,而且它在6-8之间的string也回来了。

任何想法请..

在你的正则表达式中, {6,8}寻找6到8次的重复(所以包括7)。 你需要使用一个管道(或正则表达式)来分割搜索只有6或8次。

 $ grep -o -w -E '^[[:alnum:]]{6}|^[[:alnum:]]{8}' listfile DSWEDFBG WTSETO 

使用AwkPOSIX兼容的length()函数,

 awk '(length($0)==6 || length($0)==8) && $0 ~ /[[:alnum:]]{6}|[[:alnum:]]{8}/' file DSWEDFBG WTSETO 

对于输入文件可以正常工作

 TESTING TSET24D DSWEDFBG WTSETO MSDWEHLKGY ------ -------- ------a @1234$21 

(要么)

就像埃德·莫顿(Ed Morton)所说的那样简单

 awk '/^([[:alnum:]]{6}|[[:alnum:]]{8})$/' file 

在awk中:

 awk '/^......(..)?$/' file DSWEDFBG WTSETO 

[[:alnum:]] s也一样:

 $ awk '/^[[:alnum:]]{6}([[:alnum:]]{2})?$/' file DSWEDFBG WTSETO