【发布时间】:2019-05-13 12:28:05
【问题描述】:
我有一堆清单文件,我正在尝试迭代以从中提取 Import-Packages。 Import-Package 是新行分隔的,后跟一个空格,用于所有连续的包导入,直到导入语句结束。 然后是一个新行,下一个属性(在本例中为 uri)没有空格。我只需要读取导入包属性,即导入包后跟所有换行符,然后是空格模式。
清单导入语句示例如下所示
Bnd-LastModified: 1494408636933
Bundle-ManifestVersion: 2
Import-Package: com.advantco.base,com.advantco.base.logging,com.advant
co.base.mime,com.advantco.base.net,com.advantco.base.variablesubstitu
tion,com.advantco.rest,com.advantco.rest.auth,com.advantco.rest.auth.
oauth2,com.advantco.sugarcrm.core,com.advantco.sugarcrm.core.adapter,
com.advantco.sugarcrm.core.error,com.advantco.sugarcrm.core.iface,com
.advantco.sugarcrm.core.object,com.advantco.sugarcrm.core.object.meta
data,com.advantco.sugarcrm.core.rest,com.advantco.sugarcrm.core.rest.
auth,com.advantco.sugarcrm.core.rest.metadata,com.advantco.sugarcrm.c
ore.rest.op,com.advantco.sugarcrm.core.rest.op.v10,com.advantco.sugar
crm.core.rest.parser,com.advantco.sugarcrm.core.rest.parser.object,co
m.advantco.sugarcrm.core.rest.parser.xml,com.advantco.sugarcrm.core.r
est.service,com.advantco.sugarcrm.core.result,com.advantco.sugarcrm.c
ore.result.v10,com.advantco.sugarcrm.core.service,com.advantco.sugarc
rm.core.util,com.advantco.sugarcrm.core.xml,javax.activation,javax.cr
ypto,javax.crypto.spec,javax.mail,javax.xml.bind,javax.xml.parsers,ja
vax.xml.stream,javax.xml.transform,javax.xml.transform.dom,javax.xml.
transform.stream,org.apache.commons.codec.binary,org.apache.commons.c
ollections4.map,org.apache.commons.httpclient,org.apache.commons.http
client.util,org.json
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.6))"
Tool: Bnd-3.3.0.201609221906
Export-Package: com.advantco.sugarcrm.core;uses:="com.advantco.base.lo
gging,com.advantco.sugarcrm.core.object";version="1.0.0",com.advantco
.sugarcrm.core.adapter;uses:="com.advantco.base,com.advantco.base.log
ging,com.advantco.base.net,com.advantco.base.variablesubstitution,com
.advantco.sugarcrm.core,com.advantco.sugarcrm.core.error,com.advantco
.sugarcrm.core.object,com.advantco.sugarcrm.core.object.metadata";ver
sion="1.0.0",com.advantco.sugarcrm.core.error;version="1.0.0",com.adv
antco.sugarcrm.core.iface;uses:="com.advantco.sugarcrm.core.error,com
.advantco.sugarcrm.core.object";version="1.0.0",com.advantco.sugarcrm
.core.object;uses:="com.advantco.base,com.advantco.base.mime,com.adva
ntco.base.net,com.advantco.sugarcrm.core.error,com.advantco.sugarcrm.
Uri 或所需功能或导出包不能硬编码,可能是 Import-Package 之后的其他标志,所以我需要阅读所有行,包括 Import-Package 和所有新行,然后是导入包后面的空格,直到我得到一行后跟一个新的属性字段,而不是前面的空格(不一定是给定的 Header)。
输出如下
Import-Package: com.advantco.base,com.advantco.base.logging,com.advant
co.base.mime,com.advantco.base.net,com.advantco.base.variablesubstitu
tion,com.advantco.rest,com.advantco.rest.auth,com.advantco.rest.auth.
oauth2,com.advantco.sugarcrm.core,com.advantco.sugarcrm.core.adapter,
com.advantco.sugarcrm.core.error,com.advantco.sugarcrm.core.iface,com
.advantco.sugarcrm.core.object,com.advantco.sugarcrm.core.object.meta
data,com.advantco.sugarcrm.core.rest,com.advantco.sugarcrm.core.rest.
auth,com.advantco.sugarcrm.core.rest.metadata,com.advantco.sugarcrm.c
ore.rest.op,com.advantco.sugarcrm.core.rest.op.v10,com.advantco.sugar
crm.core.rest.parser,com.advantco.sugarcrm.core.rest.parser.object,co
m.advantco.sugarcrm.core.rest.parser.xml,com.advantco.sugarcrm.core.r
est.service,com.advantco.sugarcrm.core.result,com.advantco.sugarcrm.c
ore.result.v10,com.advantco.sugarcrm.core.service,com.advantco.sugarc
rm.core.util,com.advantco.sugarcrm.core.xml,javax.activation,javax.cr
ypto,javax.crypto.spec,javax.mail,javax.xml.bind,javax.xml.parsers,ja
vax.xml.stream,javax.xml.transform,javax.xml.transform.dom,javax.xml.
transform.stream,org.apache.commons.codec.binary,org.apache.commons.c
ollections4.map,org.apache.commons.httpclient,org.apache.commons.http
client.util,org.json
然后我可以去掉新的线条看起来像
Import-Package:com.advantco.base,com.advantco.base.logging,com.advantco.base.mime,com.advantco.base.net,com.advantco.base.variablesubstitution,com.advantco.rest,com.advantco.rest.auth,com.advantco.rest.auth.oauth2,com.advantco.sugarcrm.core,com.advantco.sugarcrm.core.adapter,com.advantco.sugarcrm.core.error,com.advantco.sugarcrm.core.iface,com.advantco.sugarcrm.core.object,com.advantco.sugarcrm.core.object.metadata,com.advantco.sugarcrm.core.rest,com.advantco.sugarcrm.core.rest.auth,com.advantco.sugarcrm.core.rest.metadata,com.advantco.sugarcrm.core.rest.op,com.advantco.sugarcrm.core.rest.op.v10,com.advantco.sugarcrm.core.rest.parser,com.advantco.sugarcrm.core.rest.parser.object,com.advantco.sugarcrm.core.rest.parser.xml,com.advantco.sugarcrm.core.rest.service,com.advantco.sugarcrm.core.result,com.advantco.sugarcrm.core.result.v10,com.advantco.sugarcrm.core.service,com.advantco.sugarcrm.core.util,com.advantco.sugarcrm.core.xml,javax.activation,javax.crypto,javax.crypto.spec,javax.mail,javax.xml.bind,javax.xml.parsers,javax.xml.stream,javax.xml.transform,javax.xml.transform.dom,javax.xml.transform.stream,org.apache.commons.codec.binary,org.apache.commons.collections4.map,org.apache.commons.httpclient,org.apache.commons.httpclient.util,org.json
我正在尝试这个,但它似乎不适用于导入包后面的标头很小的情况。 (这里是 Import-Packge: package-names ...... Require-Capability: 稍后但在某些情况下它的 Import-Packge: package-names ...... url: 然后被捕获。)
`sed -n -e '/Import-Package/,/[A-Z]/ p'`
但如果 Manifest 是这样的
Bnd-LastModified: 1494408636933
Bundle-ManifestVersion: 2
Import-Package: com.advantco.base,com.advantco.base.logging,com.advant
co.base.mime,com.advantco.base.net,com.advantco.base.variablesubstitu
tion,com.advantco.rest,com.advantco.rest.auth,com.advantco.rest.auth.
oauth2,com.advantco.sugarcrm.core,com.advantco.sugarcrm.core.adapter,
com.advantco.sugarcrm.core.error,com.advantco.sugarcrm.core.iface,com
.advantco.sugarcrm.core.object,com.advantco.sugarcrm.core.object.meta
data,com.advantco.sugarcrm.core.rest,com.advantco.sugarcrm.core.rest.
auth,com.advantco.sugarcrm.core.rest.metadata,com.advantco.sugarcrm.c
ore.rest.op,com.advantco.sugarcrm.core.rest.op.v10,com.advantco.sugar
crm.core.rest.parser,com.advantco.sugarcrm.core.rest.parser.object,co
m.advantco.sugarcrm.core.rest.parser.xml,com.advantco.sugarcrm.core.r
est.service,com.advantco.sugarcrm.core.result,com.advantco.sugarcrm.c
ore.result.v10,com.advantco.sugarcrm.core.service,com.advantco.sugarc
rm.core.util,com.advantco.sugarcrm.core.xml,javax.activation,javax.cr
ypto,javax.crypto.spec,javax.mail,javax.xml.bind,javax.xml.parsers,ja
vax.xml.stream,javax.xml.transform,javax.xml.transform.dom,javax.xml.
transform.stream,org.apache.commons.codec.binary,org.apache.commons.c
ollections4.map,org.apache.commons.httpclient,org.apache.commons.http
client.util,org.json
url:http://sample.org
然后 sample.org 也被捕获。
【问题讨论】: