通过查找和替换维护GREP变量

时间:2012-11-14 15:47:06

标签: grep replace

我最近开始了一个将文档转换为HTML的项目。也就是说,客户端给我一个.DOC文件,我需要将内容转换为一个长HTML文件 - 没有样式,没有CSS,只有带段落标签的干净HTML,标题标签标签等。

我发现一个应用程序可以很好地自动化它的第一部分。问题是我需要使用变量基于字符串进行一些高级查找和替换。

例如,我有正确转换的脚注。它们目前显示为上标数字

我想改变脚注的显示方式。而不是第6个脚注的第6号上标,我希望它显示(注6)

要在整个文档(数百个脚注)上执行此操作,我想知道我是否可以执行以下操作:

FIND:

<sup><a name="FN[0-9]" href="FNR[0-9]">[0-9]</a></sup>

REPLACE:

<a name="FN%1" href="FNR%2">(Note %3)</a>

问题是,我找不到一个可以让我在替换区域中维护变量的查找和替换工具。我得到的是上标6(注释%3),以及其他每个脚注都做同样的事情。

任何人对如何有效完成任务都有任何想法?

1 个答案:

答案 0 :(得分:0)

在Perl中,它在命令行上看起来大致如此(我没有测试过这个):

perl -i -p -e's{<sup><a name="(FN\d)" href="(FNR\d)">(\d)</a></sup>}{<a name="$1" href="$2">(Note $3)</a>}' filenames....

-i说“在适当的位置编辑此文件”,-p表示“在我们执行-e切换中的任何操作后打印每一行。”

假设你只是在寻找一个有[0-9]的数字。如果您想匹配FN427,则可以将(FN\d)更改为(FN\d+),例如。

这也假设您解析的HTML看起来非常类似。如果你得到一些<a href=... name=...的HTML(属性的顺序与你的相反),那么它就会破坏。在这种情况下,您将需要使用HTML解析器。

我希望这足以让你开始。