我有几段代码在几个文件中重复:
<tr>
<th scope="row"> (some php code) </th>
<td>
(more php and html)
</td>
</tr>
在tr,th或td标签之前/之后可能存在一些空格。
我应该使用什么工具和正则表达式来替换它:
<div class="row">
$1
$2
</div>
感谢。
答案 0 :(得分:4)
对于∞ th 时间,不要使用正则表达式来解析HTML。使用HTML解析器。
在perl中,这意味着使用Web::Scraper等模块。
答案 1 :(得分:3)
Perl有一个 -0777 命令行选项,可让您将整个内容读入内存。完成后,您可以使用将\s*
替换为空格的替换,它将跨越换行边界。如果您使用.
,请务必在替换结束时使用/s
。
我无法确切地告诉你想要匹配什么,但一般原则是:
perl -0777 -i.orig -pe 's/foo/bar/gs' file1 file2 file3
答案 2 :(得分:1)
你也可以awk
这样做。首先将记录分隔符设置为</tr>
,然后找到开始标记<tr>
以及搜索字符串。假设您的搜索字符串是“更多HTML代码”。
v="my new string"
awk -vRS="</tr>" -v newstring="$v" '/<tr>/ && /more html code/{ $0=newstring}{print $0>FILENAME}' file
Perl的另一种替代方案,类似于您接受的答案
ruby -0777 -i.orig -pe 's/foo/bar/gs' file1 file2 file3