打印仅包含字母和混合字母的列。数字

时间:2013-08-08 06:12:41

标签: regex shell awk grep

是否有任何一个衬垫可以打印仅包含字母和混合字母的线条。文件中的数字?

我尝试了以下内容。但它没有成功。

awk '{print $3}' test.log | grep -o '.[0-9][a-zA-Z]*' 

修改

test.log的内容:

aaa bbb 1 ccc 
aaa mmm a1 nnn 
ooo bbb bc12 dm 

我的目的是打印:a1& BC12。

4 个答案:

答案 0 :(得分:1)

请尝试以下操作:

grep -Eio '\b([a-z]+[0-9]|[0-9]+[a-z])[0-9a-z]*\b' test.log

答案 1 :(得分:1)

如果我正确地阅读了您的问题,您希望print第三列($3)与第三列匹配(~ / ... /)字母字符[a-zA-Z]和(&&)一个数字字符([0-9])(按任意顺序),只有字母数字(!~ /[^a-zA-Z0-9]/):

% awk '$3 ~ /[a-zA-Z]/ && $3 ~ /[0-9]/ && $3 !~ /[^a-zA-Z0-9]/ {print $3}' test.log
a1
bc12

或者,这将匹配以(^)一个或多个(+)字母字符开头的第三列,后跟并以($)数字结束:

% awk '$3 ~ /^[a-zA-Z]+[0-9]+$/ {print $3}' test.log
a1
bc12

答案 2 :(得分:1)

仅使用grep

$ grep -io '[A-Z]\+[0-9]\+' test.log
a1
bc12

答案 3 :(得分:0)

不是正则表达式,但是......

print '\n'.join(x for x in mystring.split() if 0 < sum(map(str.isalpha, x)) < len(x))