在包含许多文件的目录中,如果在文件中找到特定的正则表达式(或格式),请获取该文件名
示例:
在shell中很容易,比如
但是如何在perl
中执行此操作建议我是否有任何特定的CPAN模块有助于此
Thankss
答案 0 :(得分:3)
你的例子听起来比你的shell单行更复杂。这相当于perl中的单行:
perl -nlwe 'if (/mytext/) { print $ARGV; close ARGV }' *
-n
打开文件并阅读内容。 -l
添加换行符(为方便起见)。如果找到文本,我们关闭文件句柄以避免打印多个匹配项。如果要处理更多文件,它将再次打开。
答案 1 :(得分:1)
perl -ne 'END { print join("\n", sort keys %found)} if (/PATTERNTOMATCH/) {$found{$ARGV[0]}=1;}' *
我的第一次尝试是:
perl -ne 'if (/PATTERNTOMATCH/) {print "$ARGV[0]\n";}' *
但是如果它在文件中匹配多次,则会打印出多个文件名。为了停止显示欺骗,我试图使用'last'来打破隐式循环,但它似乎不起作用。所以最好的例子是,只要找到匹配项就将文件名放入哈希值(if(/ PATTERNTOMATCH ...)然后在END块中(在开头!),它会从哈希中打印出键(要删除)重复的文件名)。
我害怕这有点可怕。我坚持使用DavidO上面提到的CPAN模块