Как добавить три строки в середину 447 html-файлов после различных строк поиска на сервере freeBSD?
Мне нужно добавить три строки на 447 страниц html. В частности, мне нужно добавить строки:
<input name="prev" type="button" value="prev" onClick="handlePrev()" id="prevButton">
<input name="next" type="button" value="next" onClick="handleNext()" id="nextButton">
<script src="nav.js"></script>
После
</table>
Тег.
Я бы предпочел сделать это в perl, но на самом деле любой возможный способ был бы в порядке. Я также был бы открыт для этого в Windows, если бы это было проще.
Один из сценариев, которые я пробовал:
#!/usr/bin/perl -i.bak -p
my $prevButton = '<input name="prev" type="button" value="prev" onClick="handlePrev()" id="prevButton">n';
my $nextButton = '<input name="next" type="button" value="next" onClick="handleNext()" id="nextButton">n';
my $jsInclude = '<script src="nav.js"></script>n';
print "TEST" if /</table>/;
Он касается страниц, но не заменяет табличный тег тестом, как я ожидал.
К твоему сведению: я полный новичок perl, так что Может быть, я совсем не в себе.
4 ответа:
Чего вы хотите, так это:
#!/usr/bin/perl -i.bak -p my $prevButton = ... my $nextButton = ... my $jsInclude = ... $_.="$prevButton\n$nextButton\n$jsInclude" if /\<\/table\>/;
И запустите скрипт следующим образом:
perl prg.pl /path/*.html
Это может сработать для вас:
cat <<\! >append.txt > <input name="prev" type="button" value="prev" onClick="handlePrev()" id="prevButton"> > <input name="next" type="button" value="next" onClick="handleNext()" id="nextButton"> > <script src="nav.js"></script> > ! cat <<\! >file.txt > a > b > c > <table> > x > y > z > </table> > d > e > f > ! sed '/<\/table>/r append.txt' file.txt a b c <table> x y z </table> <input name="prev" type="button" value="prev" onClick="handlePrev()" id="prevButton"> <input name="next" type="button" value="next" onClick="handleNext()" id="nextButton"> <script src="nav.js"></script> d e f
Когда все выглядит нормально:
sed -i.bak '/<\/table>/r append.txt' <list of files>
Вот Perl-скрипт, который работает. Он добавляет ваши 3 строки во все файлы с определенным типом doctype в каталоге. Введите путь к вашему каталогу и doctype и попробуйте:
#!/usr/bin/perl use strict; use warnings; use File::Find; my $startdir = 'enter the path to your files here!'; my $find = '</table>'; my $replace = '</table><input name="prev" type="button" value="prev" onClick="handlePrev()" id="prevButton"> <input name="next" type="button" value="next" onClick="handleNext()" id="nextButton"> <script src="nav.js"></script>'; my $doctype = 'enter your doctype here!'; find( sub{ return unless (/\.$doctype$/i); local @ARGV = $_; local $^I = '.bac'; while( <> ){ if( s/$find/$replace/ig ) { print; } else { print; } } }, $startdir); print "done";