在多个文件(大数据)上搜索和替换正则表达式

时间:2011-04-23 20:12:46

标签: ruby regex linux perl sed

我有几段代码在几个文件中重复:

<tr>
    <th scope="row"> (some php code) </th>
    <td>
         (more php and html)
    </td>
</tr>

在tr,th或td标签之前/之后可能存在一些空格。

我应该使用什么工具和正则表达式来替换它:

<div class="row">
    $1
    $2
</div>

感谢。

3 个答案:

答案 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