Perl一行程序,输出文件名

niknxzdl  于 2023-06-30  发布在  Perl
关注(0)|答案(1)|浏览(161)

大约一个月前,我发布了一个关于如何打印出文件列表以及这些文件中正则表达式的所有出现的问题。目标是得到这样的文件:

file1 A12345
    file2 A12399
    file2 A12599
    file3 A11223

等等。
经过米勒和anttix的一些帮助(再次感谢!),该表达式最终变为:

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

现在我真的希望能够添加文件的创建日期(以任何格式),所以我的结果将是这样的(和以前一样:字段的确切格式、顺序等。无所谓):

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

我已经环顾四周,没有运气弄清楚如何在一行程序中做到这一点。大量的例子涉及完整的Perl程序与opendir和变量等;但作为一个20年没写Perl的人,我想尽量做到最小化。
我尝试添加$ARGV[9]@ARGV[9]和类似的,但没有一个做的工作。
有什么建议可以尝试吗?

g52tjvyc

g52tjvyc1#

假设你真的想坚持使用一行程序,并且你想要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)' *

相关问题