Perl one-liner,打印文件名作为输出的一部分

时间:2014-05-05 16:44:30

标签: regex perl date

我在大约一个月前发布了question关于如何在这些文件中打印出文件列表和所有正则表达式的信息。目的是获得这样的文件:

    file1 A12345
    file2 A12399
    file2 A12599
    file3 A11223

等等。

在Miller和anttix的帮助下(再次感谢!),表达结果是:

    perl -lne 'print "$ARGV $1" while(/\<myxmltag>(..............)<\/myxmltag>/g)' *.XML >  /home/myuser/myfiles.txt

现在我真的希望能够添加文件的创建日期(以任何格式),所以我的结果将是这样的(如前所述:确切格式,字段顺序等无关紧要):< / p>

    file1 A12345 01/01/2013
    file2 A12399 02/03/2013
    file2 A12599 02/03/2013

我环顾四周,没有运气,想知道如何在单行中做到这一点。很多涉及带opendir和变量的完整Perl程序的例子等等;但作为20年没有写过Perl的人,我正试图保持简约。

我尝试添加$ARGV[9]@ARGV[9]和类似但没有人完成这项工作。

有关尝试什么的任何建议?

1 个答案:

答案 0 :(得分:1)

假设你真的想坚持一个班轮而你想要modification time,试试这个:

perl -MTime::localtime -lne 'print "$ARGV  $1 ". ctime((stat "$ARGV" )[9]) while(/\<myxmltag>(..............)<\/myxmltag>/g)' *

这会导入Time::localtime模块。从该模块ctime()用于将(stat filename)[9]的结果(modification timestat()返回的数组中的第9个元素)从unix时间戳转换为更多可读格式。

另一种变体是使用POSIX模块中的strftime()

   perl -MPOSIX -lne 'print "$ARGV $1 " . strftime("%d/%m/%y", localtime((stat "$ARGV")[9])) while(/\<myxmltag>(..............)<\/myxmltag>/g)' *