Ant заменить текст файла, который не начинается с - PullRequest
1 голос
/ 05 ноября 2010

Я хочу создать цель муравья, которая может заменить содержимое файла (или более), который не начинается с определенного шаблона.Есть ли решение для этого с помощью муравья и replaceregexp?Или альтернатива этому?Пример:

  • У меня есть файл boo.txt с текстом «this is boo».
  • Также у меня есть файл foo.txt с текстом «just foo»".

Я хочу изменить текст для foo.txt на" this just foo "

Ответы [ 2 ]

7 голосов
/ 06 ноября 2010

Возможно, вы создадите подходящее регулярное выражение с перехватами.

Похоже, что это работает для приведенного вами примера.

<property name="prefix" value="this " />
<replaceregexp flags="s" match="^(${prefix})?(.*)" replace="${prefix}\2">
    <fileset dir="files" />
</replaceregexp>
  • Файлы указаны с использованиемнабор файлов - здесь все файлы в каталоге files.
  • Префикс, который мы хотим добавить, является this, который хранится в свойстве, так как нам нужно упомянуть его в двух местах.
  • Параметр flags="s" гарантирует, что мы будем рассматривать файл как одну строку для целей сопоставления (а не сопоставлять каждую строку).
  • Регулярное выражение ищет строку префикса в файле и сохраняетэто в захвате \1 - который отбрасывается.
  • Остальная часть строки находится в захвате \2.
  • Замените на строку префикса, за которой следует захват \2.

Вы можете подумать, что всегда добавляете префикс, но после удаления префикса, если он уже есть ... за исключением того, что задача replaceregexp не запишет файл, если неотличается от существующего.

0 голосов
/ 06 ноября 2010

это только частичный ответ .. Я не уверен, что это правильно, но, по крайней мере, может быть, может дать вам какое-то направление

для этого вам понадобится ant-contrib

    <property name="folder.name" value="some-folder-name" />
    <property name="text.substitution" value="this " />

    <target name="main">
       <foreach target="target2" param="file_path"> 
          <path> 
             <fileset dir="${folder.name}" casesensitive="no" /> 
          </path> 
       </foreach>
    </target>

<target name="target2">
    <loadfile property="message" srcFile="${file_path}"/>
        <!-- f message doesnt have text.substitution at the begging -->
        <!-- not sure if this is correct regex -->
        <propertyregex property="myprop" input="${message}" 
                      regexp="([^b]+)" select="\0" casesensitive="false" /> 
    <if>
        <equals arg1="${myprop}" arg2="{text.substitution}" />      
    <then>
        <concat destfile="foo.txt" append="true">${text.substitution} </concat>  
    </then>
    </if>
</target>
...