2

我需要在 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\>/;

它触及页面,但没有像我所期望的那样用 TEST 替换 table 标记。

仅供参考:我完全是 perl 新手,所以我可能完全不在这儿了。

4

4 回答 4

1

你想要的是:

#!/usr/bin/perl -i.bak -p
my $prevButton = ...
my $nextButton = ...
my $jsInclude = ...
$_.="$prevButton\n$nextButton\n$jsInclude" if /\<\/table\>/;

并将脚本运行为:

perl prg.pl /path/*.html
于 2012-05-03T14:29:04.723 回答
1
sed -i -e '/<table>/aYourStringToAppendHere' file
于 2012-05-03T14:33:43.243 回答
1

这可能对您有用:

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>
于 2012-05-03T14:51:50.030 回答
1

这是一个有效的 Perl 脚本。它会在目录中具有特定文档类型的所有文件中添加 3 行。输入目录的路径和 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";
于 2012-05-03T15:16:02.543 回答