将文件名写为 txt 文件中的第一行 + 周围的文本 / osx perl

write filename as first line in a txt file + text around it / osx perl

我是 perl 的新手,希望您能帮助我处理这行代码。 这个问题与这个 有关,但它并没有完全回答我的问题。我试图寻找它,但我越来越困惑。

我有一个 txt 输入(批处理),我希望在第一行打印一个文件名,但用特定文本包装。我稍后将这些文件转换为 html,因此我希望 .name 之前打印 "<div class="head">",之后打印 "</div>"

这是我的代码,它可以打印名称:

perl -i -pe 'BEGIN{undef $/;} s/^/$ARGV\n/' `find . -name '*.txt'`

我 运行 首先导航到所有文件所在的目录。 文件名示例:2016-05-20_18.32.08.txt 这些文件是平面文本诗歌,在输出中我得到: ./2016-05-20_18.32.08.txt 在第一行。

我试过这样的事情:

perl -i -pe 'BEGIN{undef $/;} s/^/$ARGV\n/' `find . -name ‘“<div class="head”>”’*.txt’”</div>”’

当然不行。它只是给我一个 > 我需要在这部分添加参数 s/^/$ARGV\n/' 但我在定义它时遇到了麻烦。

你能帮忙吗?

此外,文件名打印以./开头,有没有简单的方法可以排除?

我确定有更优雅的方法,但像这样的方法会起作用

#!/usr/bin/perl

undef $/;

for (@ARGV){
        open($fh,$_);
        $content=<$fh>;
        close($fh);
        open($fh,">$_");
        print $fh "<div class=\"head\">$_</head>\n$content";
        close($fh)
}
perl -i -pe 'BEGIN{undef $/;} s/^/<div class=head> $ARGV <\/div>\n<div class=poem>\n/; s/$/\n<\/div>/' `find . -name '*.txt'`

这应该有效。但是如果您是 perl 的新手,我建议您尝试使用脚本而不是单行代码。

-i 标志将就地编辑文件。所以如果你想要一个 html 文件,删除 -i 并重定向到另一个 .html 文件。