用Phing查找文件替换文本

mil*_*lan 15 phing

有谁知道如何使用Phing查找和替换文件中的文本?

acm*_*cme 27

如果您不想复制文件并只是替换文件所在的当前文件夹中的字符串,请执行自反任务:

<reflexive>
    <fileset dir=".">
        <include pattern="*.js" />
    </fileset>
    <filterchain>
        <replaceregexp>
            <regexp pattern="SEARCH" replace="REPLACEMENT"/>
        </replaceregexp>
    </filterchain>
</reflexive>
Run Code Online (Sandbox Code Playgroud)


poi*_*son 25

您可以使用过滤器替换文件内的文本.过滤器用于其他文件操作任务,例如复制.

我相信过滤器背后的主要思想是你可以使用带有令牌而不是真值的模板文件,然后将令牌替换为复制过程的一部分.

快速示例:将数据库配置模板文件存储在模板目录中.然后使用以下命令将其复制到目标配置文件:

<copy file="templates/database.config.php.tpl" tofile="config/database.config.php" overwrite="true">
                <filterchain>
                    <replacetokens begintoken="%%" endtoken="%%">
                        <!-- MySQL TOKENS -->
                        <token key="dbname" value="${db.mysql.dbname}" />
                        <token key="dbhost" value="${db.mysql.host}" />
                        <token key="dbport" value="${db.mysql.port}" />
                        <token key="dbuser" value="${db.mysql.username}" />
                        <token key="dbpassword" value="${db.mysql.password}" />
                    </replacetokens>
                </filterchain>
            </copy>
Run Code Online (Sandbox Code Playgroud)

有许多其他过滤器(例如正则表达式搜索和替换)可用.请参阅文档中有关过滤器的更多信息:http://phing.info/docs/guide/stable/chapters/appendixes/AppendixD2-CoreFilters.html


Fab*_*bio 8

我一直在寻找相同的东西,我发现存在一个名为ExpandProperties的过滤器,它允许替换复制文件中的属性.例如,我在apache虚拟主机模板中使用它:

<target name="apache-config" description="Generates apache configuration">
    <!-- Default value for Debian/Ubuntu -->
    <property name="apache.vhost.dir" value="/etc/apache2/sites-available" override="false"/>
    <copy file="${application.startdir}/docs/vhost.conf.tpl" todir="${apache.vhost.dir}" overwrite="true">
        <filterchain>
            <expandproperties/>
        </filterchain>
    </copy>
    <echo message="Apache virtual host configuration copied, reload apache to activate it"/>
</target>
Run Code Online (Sandbox Code Playgroud)

并在模板文件中

<VirtualHost *:80>
   DocumentRoot "${application.startdir}/public"
   ServerName ${apache.default.host}

   <Directory "${application.startdir}/public">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

这样你就不需要明确列出你想要替换的所有标记,非常有用......


ccp*_*zza 1

使用“传统”工具实现此目的的最简单方法是sed

\n
sed -i \'s/old/new/g\'\xc2\xa0 myfile.txt\n
Run Code Online (Sandbox Code Playgroud)\n

如果它是基于 ant 的,那么这应该有所帮助:http ://ant.apache.org/manual/Tasks/replace.html

\n

最简单的形式是<replace file="myfile.html" token="OLD" value="NEW"/>.

\n

如果您确实需要它,您可以使用 ant 运行外部工具,如http://ant.apache.org/manual/Tasks/exec.html中所述,这意味着您可以从以下位置调用 sed蚂蚁与类似的东西:

\n
 <exec executable="sed">\n   <arg value="s/old/new/g" />\n   <arg value="$MY_FILE" />\n </exec>\n
Run Code Online (Sandbox Code Playgroud)\n