我想搜索一个文件,其中有任何包含字母数字单词的单词(即同时包含字母和数字的单词)
我尝试使用不同的grep组合,但无法找到我想要获得的确切结果
例如,如果我的文件包含多行
asbcd acblk54 lkasdfn
098213 102938 091283
aalk adsf adf
lkjas 0098324 0980 assdf
alkj30lkl 093adflkj 0lkdsf094
由于第1行和第5行包含字母数字单词,因此仅应过滤两行。我该如何使用grep来实现这一点。(第2行仅包含数字,第3行仅包含字母,第4行包含字母或数字,但不能同时包含两者)
答案 0 :(得分:0)
您感兴趣的是与完整单词匹配的grep。因此,您需要使用-w
选项:
-w, --word-regexp
::仅选择那些包含组成整个单词的匹配项的行。测试是匹配的子字符串必须在该行的开头,或者必须在非单词组成字符之前。同样,它必须在行的末尾,或后跟非单词组成字符。单词组成的字符是字母,数字和下划线。如果还指定了-x
,则此选项无效。来源:
man grep
您搜索的正则表达式确实使用了[[:alnum:]]
,但是您必须确保它同时具有[[:alpha:]]
和[[:digit:]]
。因此,包含两者的单词必须具有序列[[:alpha:]][[:digit:]]
或[[:digit:]][[:alpha:]]
。因此,您要使用的正则表达式为:[[:alnum:]]*([[:alpha:]][[:digit:]]|[[:digit:]][[:alpha:]])[[:alnum:]]*
以下grep会进行匹配:
$ grep -w -E '[[:alnum:]]*([[:alpha:]][[:digit:]]|[[:digit:]][[:alpha:]])[[:alnum:]]*' file