这样的事情
<h2 style='margin-top: 10px;'>
<?php echo $title; ?>
</h2>
应该成为
<h1 style='margin-top: 10px;'>
<?php echo $title; ?>
</h1>
我使用此代码perl -pi -e 's/<h2(.*)<\/h2>/<h1\1<\/h1>/g' *
但仅当代码位于一行时才有效。
答案 0 :(得分:4)
无需配对开始和结束标签。只需将所有打开的<h2>
标记更改为“`,然后对所有结束标记执行相同操作。喜欢这个
perl -pie 's|<h2\b|<h1|g; s|</h2\b|</h1|g;' *
答案 1 :(得分:2)
perl -pi.bak -we 's#</?h\K2#1#g' yourfile
\K
会在其前面保留匹配的文字。这样我们就不必在匹配后把它放回去了。
答案 2 :(得分:1)
没有* nix环境要测试,但是
% find . -name "*.html" -exec sed -e s/\<h2/\<h1/g -e 's|</h2|</h1|g' {} \;
可能会让你开始。不需要Perl。
答案 3 :(得分:0)
您可以像这样使用perl:
perl -0pe -i.bak 's#<h2(.*?)</h2>#<h1$1</h1>#gs' file
答案 4 :(得分:0)
下面的代码适用于我
use strict;
use warnings;
open FILE, 'inputfile.txt';
my $contents = do { local $/; <FILE> };
close FILE;
$contents =~ s/<h2(.*?)<\/h2>/<h1$1<\/h1>/sg;
print $contents;
请注意,$/
是输入记录分隔符。默认为新行\n
。
我们创建$/
的本地化版本,以便在块完成后恢复其先前的值。