【问题标题】:Print the column which contains only the mix of alphabets & numbers打印仅包含字母和数字混合的列
【发布时间】:2013-08-08 06:12:41
【问题描述】:

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

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

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。

【问题讨论】:

  • 打印整行?那可能是 grep -E "^[a-zA-Z0-9 ]+$" test.log
  • 我已经编辑了我的问题。对不起..

标签: regex shell awk grep


【解决方案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】:

    仅使用grep

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

    【讨论】:

      【解决方案3】:

      尝试以下操作:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-18
          • 2021-08-13
          • 2012-05-11
          • 1970-01-01
          • 2022-01-08
          • 1970-01-01
          相关资源
          最近更新 更多