我有一个文件里面有下面的内容,
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
使用Awk
和POSIX
兼容的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