电脑技术学习

使用 UNIX 进行文本处理

dn001

  正如您所看到的,这里一共有 7 列:

  • 权限
  • 链接的数目
  • 属主
  • 大小
  • 最后的修改时间
  • 名称
  •   让我们来建立一些正则表达式,以匹配其中的每一列:

  • .([r-][w-][x-]){3}—权限(使用 . 匹配第一个字符,因为它可能是几个不同的特殊字符中的任何一个。)
  • [[:digit:]]+—链接的数目
  • [A-Za-z0-9_-.]+ -—属主(您还可以使用这个模式进行组匹配。)
  • [[:digit:]]+—大小
  • .{3} [0-9 ]{2} [0-9 ][0-9]:[0-9][0-9]—修改时间(您可以对这个模式进行一些简化,因为所有的文件都在 6 月份进行的修改,所以您可以确切地指定月份的名称。)
  • .+$—名称(在这些内容之后,您需要匹配所有的字符,直到行尾。)
  •   在上述模式之间,必须使用 [[:space:]]+ 对它们进行连接,因为您并不知道这些列之间究竟是使用空格或制表符,还是两者的组合进行分隔。您还需要将权限、大小和名称放到组中,以便可以在替换中使用它们。如清单 15 所示,正则表达式很快就变得难以理解。

      清单 15. 完成后的正则表达式实在难以理解!

    (.([r-][w-][x-]){3})[[:space:]]+[[:digit:]]+[[:space:]]+([A-Za-z0-9_-.]
    +[[:space:]]+){2}([[:digit:]]+)[[:space:]]+.{3} [0-9 ]{2} [0-9
    ][0-9]:[0-9][0-9][[:space:]]+(.+)$

      如果您仔细研究这个可怕的正则表达式模式,您将发现 5 个组:

  • 完整的权限块
  • 权限块中最后匹配的 rwx 组
  • 组(该模式的属主/组部分中最后匹配的内容)
  • 大小
  • 名称
  •   在清单 16 中,您将更改 ls -l 的输出以显示文件名、权限和大小。

    标签: