Linux grep只有n,m个字符串

时间:2017-04-19 12:46:44

标签: linux awk grep

我的文件包含以下内容,

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之间的字符串也会恢复。

请知道..

3 个答案:

答案 0 :(得分:3)

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

(或)

更简单,就像埃德莫顿建议的那样,只需要做

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