【问题标题】:help parsing values using perl regular expression帮助使用 perl 正则表达式解析值
【发布时间】:2011-04-09 17:31:52
【问题描述】:

我一直在试图找出 perl 正则表达式来提取以下值:(/home/mail/dump 目录总是相同的)。谢谢。

abc

123456

这是输出:

drwxr-xr-x   - mail_hd mail_users          0 2011-03-26 20:12 /home/mail/dump/abc
drwxr-xr-x   - mail_hd mail_users          0 2011-04-15 09:10 /home/mail/dump/123456

【问题讨论】:

    标签: regex perl


    【解决方案1】:

    也许改用splitbasename

    【讨论】:

    • use File::Basename qw( basename ); basename((split(' ', $_, 8))[-1])
    【解决方案2】:

    这类似于this.

    在“/”上拆分,得到最后一项

    awk -F"/" '{print $NF}' file
    

    Ruby(1.9+)(Perl 类似)

    $ ruby -ne 'print $_.sub(/.*\//,"")' file
    abc
    123456
    
    $ ruby -F"/" -ane 'print $F[-1]' file
    abc
    123456
    

    【讨论】:

    • 自从 OP 要求 Perl,perl -F/ -lane'print $F[-1]' file
    • @ikegami。你应该提供这个作为答案。
    • 谢谢大家,这些都是很好的答案。看到其他版本很酷。我会和这些一起去的。
    【解决方案3】:

    下面的 perl 正则表达式将只给出最后一个正斜杠之后的字符。

    s=.*/==
    

    例子:

    $ echo 'wxr-xr-x   - mail_hd mail_users          0 2011-03-16 18:46 /home/mail/dump/abc' | perl -pe 's=.*/=='
    abc
    

    【讨论】:

      【解决方案4】:

      也许这很有用,应该返回你需要的。

      if ($subject =~ m!/home/mail/dump/(.*)$!) {
          $result = $1;
      } else {
          $result = "";
      }
      

      它匹配/home/mail/dump/ 之后直到行尾的所有内容

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-26
        • 2018-05-05
        相关资源
        最近更新 更多