我有以下文本文件:
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
我的正则表达式应该摆脱空行?
感谢。
答案 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"/>
这适合我。