我的文件包含以下内容,
TESTING
TSET24D
DSWEDFBG
WTSETO
MSDWEHLKGY
并希望grep字符串只有6和8个字符长。
我尝试了下面的一个,
[root@server ~]# cat listfile | grep -o -w -E '^[[:alnum:]]{6,8}'
TESTING
TSET24D
DSWEDFBG
WTSETO
[root@server ~]#
似乎可以在某些服务器上运行,并且它在6-8之间的字符串也会恢复。
请知道..
答案 0 :(得分:3)
将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
(或)
更简单,就像埃德莫顿建议的那样,只需要做awk '/^([[:alnum:]]{6}|[[:alnum:]]{8})$/' file
答案 1 :(得分:3)
在你的正则表达式中,{6,8}
寻找6到8次的重复次数(因此包括7次)。您需要使用管道(正则表达式中的OR)将搜索分割为6或8次。
$ grep -o -w -E '^[[:alnum:]]{6}|^[[:alnum:]]{8}' listfile
DSWEDFBG
WTSETO
答案 2 :(得分:0)
在awk中:
awk '/^......(..)?$/' file
DSWEDFBG
WTSETO
[[:alnum:]]
s的相同内容:
$ awk '/^[[:alnum:]]{6}([[:alnum:]]{2})?$/' file
DSWEDFBG
WTSETO