我有一份文件内容如下,
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之间重新分配字符串。
请告诉我..。
发布于 2017-04-19 12:54:42
在正则表达式中,{6,8}查找6到8次之间的重复(包括7)。您需要使用管道(在regex中使用OR )来拆分搜索6次或8次。
$ grep -o -w -E '^[[:alnum:]]{6}|^[[:alnum:]]{8}' listfile
DSWEDFBG
WTSETO发布于 2017-04-19 12:48:50
使用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发布于 2017-04-19 12:53:30
在awk中:
awk '/^......(..)?$/' file
DSWEDFBG
WTSETO对于[[:alnum:]]s也是如此:
$ awk '/^[[:alnum:]]{6}([[:alnum:]]{2})?$/' file
DSWEDFBG
WTSETOhttps://stackoverflow.com/questions/43496176
复制相似问题