首页 > UniX技术

使用UNIX命令进行文本处理cat 和 echo

时间:2009-04-15 17:57:39  作者:chinaitlab  我要投稿
Linux初探欢迎您的投稿,投放方法请点击这里查看,我们会定期赠送精美小礼品给优秀的投稿作者。海纳百川 取则行远!LinuxGoo欢迎您的到来。
UNIX......

正如您所看到的,这里一共有 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 个组:

  1. 完整的权限块
  2. 权限块中最后匹配的 rwx 组
  3. 组(该模式的属主/组部分中最后匹配的内容)
  4. 大小
  5. 名称

在清单 16 中,您将更改 ls -l 的输出以显示文件名、权限和大小。


清单 16. 对输出进行重组
 

chrish@dhcp3 [382]$ ls -l | tail | sed -E

 's/(.([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 (\1) has \4 bytes of data/'

gsrvdir501 (drwx------) has 102 bytes of data

hsperfdata_chrish (drwxr-xr-x) has 68 bytes of data

hsperfdata_root (drwxr-xr-x) has 102 bytes of data

illustrator_activation.plist (-rw-r--r--) has 531 bytes of data

indesign_activation.plist (-rw-r--r--) has 531 bytes of data

objc_sharing_ppc_4294967294 (-rw-------) has 24 bytes of data

objc_sharing_ppc_501 (-rw-------) has 132 bytes of data

objc_sharing_ppc_92 (-rw-------) has 24 bytes of data

photoshop_activation.plist (-rw-r--r--) has 531 bytes of data

serialinfo.plist (-rw-r--r--) has 928 bytes of data

      

成功了!您已经完成了对输出结果的转换。

使用 Perl 完成相应的工作

Perl 编程和脚本语言(请参见参考资料部分)的功能非常强大,通常可用来取代前面介绍的 tr 和 sed 命令。通常可以在命令行中直接输入简短的 Perl 程序,有时它可以完成比 tr 或 sed 命令行更多的操作。

Perl 的 -p 选项告诉它读取和处理标准输入中的每行内容,并将结果打印到标准输出。-e 选项允许您在命令行中指定一个 Perl 表达式(实际上是一个程序)。

清单 17 显示了如何使用 Perl 完成清单 5 中的示例。


清单 17. 使用 Perl 完成 tr 的工作
如果您需转载 使用UNIX命令进行文本处理cat 和 echo,请注明来自LinuxGoo.com,其版权归原作者所有。请广大网友留言时遵纪守法,使用文明用语。如果您在应用中有什么问题,请在下面留言,我们会尽快解答。
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目热门