1

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

我尝试了以下。但这行不通。

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

4 回答 4

1

尝试以下操作:

grep -Eio '\b([a-z]+[0-9]|[0-9]+[a-z])[0-9a-z]*\b' test.log
于 2013-08-08T06:19:59.330 回答
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
于 2013-08-08T06:24:43.600 回答
1

仅使用grep

$ grep -io '[A-Z]\+[0-9]\+' test.log
a1
bc12
于 2013-08-08T06:29:55.620 回答
0

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

print '\n'.join(x for x in mystring.split() if 0 < sum(map(str.isalpha, x)) < len(x))
于 2013-08-08T07:40:48.690 回答