如何使用Ant replaceregexp删除一行,但不要留空行

时间:2012-11-20 21:07:04

标签: ant

我有以下文本文件:

    Manifest-Version: 3.0.0
    Ant-Version: Apache Ant 1.7.1
    Created-By: 10.0-b19 (Sun Microsystems Inc.)
    Require-Bundle: org.eclipse.linuxtools.cdt.libhover;bundle-version="1.
     1.0"
    Bundle-SymbolicName: com.qnx.doc.gestures.lib_ref
    Bundle-Version: 3.0.0.20121120
    Bundle-Localization: plugin
    Bundle-Name: %plugin.name
    Bundle-Vendor: %plugin.providername

我正在尝试在replaceregexp任务中使用以下模式

    regexp pattern='Require-Bundle: org.eclipse.linuxtools.cdt.libhover;bundle-version="1.
   [\s\S]*'

最终得到这个:

    Manifest-Version: 3.0.0
    Ant-Version: Apache Ant 1.7.1
    Created-By: 10.0-b19 (Sun Microsystems Inc.)
     1.0"
    Bundle-SymbolicName: com.qnx.doc.gestures.lib_ref
    Bundle-Version: 3.0.0.20121120
    Bundle-Localization: plugin
    Bundle-Name: %plugin.name
    Bundle-Vendor: %plugin.providername

问题是我一直这样:

    Manifest-Version: 3.0.0
    Ant-Version: Apache Ant 1.7.1
    Created-By: 10.0-b19 (Sun Microsystems Inc.)

     1.0"
    Bundle-SymbolicName: com.qnx.doc.gestures.lib_ref
    Bundle-Version: 3.0.0.20121120
    Bundle-Localization: plugin
    Bundle-Name: %plugin.name
    Bundle-Vendor: %plugin.providername

我的正则表达式应该摆脱空行?

感谢。

2 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

Require-Bundle: org\.eclipse\.linuxtools\.cdt\.libhover;bundle-version="1\.\s*1.0"\s*

(使用\s*匹配零个或多个空格字符,包括\r\n)但是由于您正在处理清单文件,因此使用适当的清单解析器。不幸的是,Ant <manifest>任务没有提供删除属性的方法,但是<script>任务非常简单:

<property name="manifest.file" location="path/to/manifest.txt" />

<script language="javascript"><![CDATA[
    importPackage(java.io);
    importPackage(java.util.jar);

    // read the manifest
    manifestFile = new File(project.getProperty('manifest.file'));
    manifest = new Manifest();
    is = new FileInputStream(manifestFile);
    manifest.read(is);
    is.close();

    // remove the offending attribute
    manifest.getMainAttributes().remove(new Attributes.Name('Require-Bundle'));

    // write back to the original file
    os = new FileOutputStream(manifestFile);
    manifest.write(os);
    os.close();
]]></script>

答案 1 :(得分:1)

<replaceregexp file="manifest.mf" match='Require-Bundle: org.eclipse.linuxtools.cdt.libhover;bundle-version=\"[^\"]+\"[\r\n]*' replace="" flags="m"/>

这适合我。