如何在Perl单行中打印正在处理的文件的名称?

时间:2009-08-13 11:18:42

标签: perl command-line

我通常使用perl one line而不是grep来搜索文件。

例如,以下打印包含 #include <stdio.h>

的所有位置
perl -ne "print if(/#include\s*[\"<]stdio.h/)" */*.[ch] 

但我找不到打印获取这些行的文件名的方法。我试图打印$ARGV[0],但没有用。

那么,如何打印包含这些行的文件名呢?

3 个答案:

答案 0 :(得分:10)

包含*ARGV被打开的文件名称的变量是$ARGV,而不是$ARGV[0]@ARGV的第一个元素)。

print "$ARGV: $_" if /include\s*[\"<]stdio.h/;

答案 1 :(得分:4)

$ARGV是当前正在读取的文件名的特殊变量。我相信这就是你所需要的。

答案 2 :(得分:4)

使用ack,这是grep:

的一个很好的替代品(用perl编写)
$ ack --cc '#include'

NB

我知道,我在作弊:-P