записать имя файла в качестве первой строки в текстовом файле + текст вокруг него / osx perl - PullRequest
0 голосов
/ 29 ноября 2018

Я новичок в Perl, и я надеюсь, что вы можете помочь мне с этой строкой кода.Проблема связана с этим здесь , но она не совсем отвечает на мой вопрос.Я пытался найти его, но я просто запутался.

У меня есть текстовый ввод (пакет), который я хочу, чтобы имя файла было напечатано в первой строке, но обернуто в определенный текст.Позже я конвертирую эти файлы в 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/', но у меня уже есть проблемы с его определением.

Можете ли вы помочь PLS?

Кроме того, имя файлав начале печатается с ./, есть ли простой способ исключить это?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018
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-файл.

0 голосов
/ 29 ноября 2018

Я уверен, что есть более элегантный способ сделать это, но что-то вроде этого будет работать

#!/usr/bin/perl

undef $/;

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