模式搜索目录中的所有文件

时间:2013-02-19 09:05:00

标签: perl

我的模式类似于“关键字:多节点”。现在,我需要在目录中的所有文件中搜索此模式。如果我们在任何文件中找到了模式,则应返回非空字符串。它可能包含文件名或目录名

在shell脚本中,以下内容将执行相同的操作

KeyMnode = grep -w "keyword : Multinode" ${dirname}/*

我想过使用find(子例程,directory_path)并在子例程中我想遍历整个目录中的所有条目。对于每个条目,我想检查它是否是可读文件。如果文件是可读的,我想在找到的文件中搜索所需的模式“keyword:Multinode”。如果我们成功命中,整个find命令应该导致非空字符串(最好只有现有目录Name),否则会产生空字符串。如果您需要任何进一步的信息,请与我们联系。

我希望使用perl完成此操作。请帮我解决。

1 个答案:

答案 0 :(得分:0)

以下是一些Perl工具,可用于执行您所描述的内容:

  • File::Find将对目录及其子项中的文件进行递归搜索,针对每个文件运行代码(文档中的\&wanted回调)以确定它是否符合您的条件
  • -r运算符会告诉您文件是否可读(if (-r $file_name)...
  • open会让您访问该文件,<$fh>会读取其内容,以便您可以使用正则表达式检查它们是否与您的目标模式匹配
  • \b添加到模式的开头和结尾会使其仅在字边界处匹配,类似于grep的{​​{1}}开关

如果您有更具体的问题,请发布其他问题以及展示这些问题的代码,包括您预期会发生什么以及实际结果与您的期望有何不同的陈述,我们很乐意帮助解决这些问题

编辑:评论代码的清理和可运行版本:

-w