perl替换文本块

时间:2012-10-29 12:52:27

标签: regex perl replace

我非常坚持创造一件我需要的perl。

我有一个包含以下内容的文件

    define(`CONFM4_AST_MODULES', `NOLOAD => app_thingie.so
    NOLOAD => app_thingie2.so
    NOLOAD => app_thingie3.so')

现在我需要能够重写整个块,所以我正在考虑匹配“(`CONFM4_AST_MODULES”和“')之间的所有内容”删除它然后再次追加它。在文件的末尾。 是否有可能像这样的正则表达式?如果是这样的话?

无法在perl脚本中对整个文本进行硬编码,因为它有时会发生变化。

如果您对如何解决这个问题有任何其他想法,我很乐意听到它:)

文件中存在的东西数量也会从3变为20。

1 个答案:

答案 0 :(得分:2)

是的,有可能。您可以将整个文件读入变量并进行替换:

my $var = do { local $/; <> };                           # Read in the file.
my $re = qr/(define\(`CONFM4_AST_MODULES',[^)]+\)\n?)/;  # How to search for the defines.
my @defs = $var =~ /$re/g;                               # Remember the defines.
$var =~ s/$re//g;                                        # Remove them.
print $var, @defs;

已更新:代码已得到改进和测试。