Как добавить три строки в середину 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 2

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
sed -i -e '/<table>/aYourStringToAppendHere' file

Это может сработать для вас:

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";