如何在perl脚本中指定一系列空格?

时间:2012-08-16 14:39:53

标签: regex perl grep

我有两个文件,即{em> 8月3日创建的abc_0123_4567.dat 8月14日创建的abc_0012_0043.dat

当我们在shell中输入ls -ltra时,我们得到

-rw-r--r--   1 user  sample   640578  Aug  3  03:15  abc_0123_4567.dat
-rw-r--r--   1 user  sample   488542  Aug 14  03:20  abc_0012_0043.dat

当我们使用ls -ltra abc* | grep "Aug 3"时 它会显示

-rw-r--r--   1 user  sample   640578  Aug  3  03:15  abc_0123_4567.dat

您可以在日期看到,Aug 3中间有两个空格,Aug 14之间有一个空格。

我希望在perl中使用与shell命令一样的精确空格进行编码时看到相同的结果。

3 个答案:

答案 0 :(得分:2)

我认为你所要求的是一个带有一位数和两位数的正则表达式。

首先,如果你实际上并不关心空格数,你可以这样做:

qr/ ( \b        # At word boundary
      (?:Jan|Feb|Mar|Apr|May|Ju[ln]|Aug|Sep|Oct|Nov|Dec) # 3-letter months
      [ ]{1,2}   # minumum 1, maximum 2 spaces
      \d{1,2}    # minumum 1, maximum 2 digits
    )
   /x;

但这允许'Aug..14''.' - > ' '),如果这种情况发生的话。

其次,如果您想要更严格的规范,可以执行以下操作

qr/ ( \b        # At word boundary
      (?:Jan|Feb|Mar|Apr|May|Ju[ln]|Aug|Sep|Oct|Nov|Dec) # 3-letter months
      [ ]       # exactly one space
      [ 123]    # it's a *date* after all
      \d        # ending with a digit
    )
   /;

因此,你得到一个三字符序列,一个确定的空格,一个空格或可能的数字等于或小于3,以及任何大小的一个确定数字。

答案 1 :(得分:1)

如果您正在尝试获取一堆文件的修改日期,那么使用stat运算符返回的mtime比解析ls的输出更好。

这是一个数字,您可以使用localtime()运算符将其分解为日期字段。

解析ls输出几乎不是正确的事情。

答案 2 :(得分:0)

正则表达式始终与精确空格匹配:

ls -ltra abc* | perl -nE "print if /Aug  3/"

几乎完全相同:

ls -ltra abc* | grep "Aug  3"