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

时间:2018-11-29 08:36:39

标签: perl batch-processing

我对perl完全陌生,希望您能在这一行代码中对我有所帮助。 这个问题与此here有关,但是并不能完全回答我的问题。我尝试寻找它,但是我变得更加困惑。

我有一个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/'中添加参数,但是我已经很难定义它。

你能帮忙吗?

此外,文件名开头以./开头,是否有一种简单的方法来排除该文件名?

2 个答案:

答案 0 :(得分:0)

我敢肯定有一种更优雅的方法,但是类似的事情会起作用

#!/usr/bin/perl

undef $/;

for (@ARGV){
        open($fh,$_);
        $content=<$fh>;
        close($fh);
        open($fh,">$_");
        print $fh "<div class=\"head\">$_</head>\n$content";
        close($fh)
}

答案 1 :(得分:0)

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文件。