我有以下字符串:
com.advantco.aws.core;version="[1.0,2)",com.advantco.aws.core.adapter;version="[1.0,2)",com.advantco.aws.core.adapter.channelreader.receiver;version="[1.0,2)",com.advantco.aws.core.adapter.channelreader.sender;version="[1.0,2)",com.advantco.aws.core.service;version="[1.0,2)",com.advantco.aws.core.service.s3;version="[1.0,2)"
在;version
之后需要删除所有内容,直到",
基本上只需要获取所有软件包名称即可,输出就像
com.advantco.aws.core
com.advantco.aws.core.adapter
com.advantco.aws.core.adapter.channelreader.receiver
...
我正在尝试
sed -e's/.;*.[",]//g'
但这只会给我
com.adntco.aws.core;versio[1,com.adntco.aws.core.adapter;versio[1
我需要在一行中匹配多个匹配项。 我在这里做什么错了?
更新一: 有些软件包缺少导入版本,有些软件包具有其他子属性而不是版本,例如com.advantco.core; optiona = true,所以基本上我希望删除;之后的所有内容。直到最后一个逗号(即分号后可能有多个逗号,也可能没有分号,而只有一个逗号。)
示例
com.advantco.aws.core;version="[1.0,2)",com.advantco.aws.core.adapter,com.advantco.aws.core.adapter.channelreader.receiver;version=false,com.advantco.aws.core.adapter.channelreader.sender;optional=true,com.advantco.aws.core.service;version="[1.0,2)",com.advantco.aws.core.service.s3;version="[1.0,2)"
在其他评论中添加了其他详细信息
边缘测试用例对于我的某些导入而言,这是失败的,因此,在您具有resolution = optional而不是version的地方,示例的边缘测试用例。
com.advantco.base.hci.af.util;version="[1.0,2)", javax.security.auth.x500;resolution:=optional,com.advantco.base.hci.variablesubstitution,com.advantco.base.logging,com.advantco.base.mime,com.advantco.base.net,com.advantco.base.variablesubstitution,com.advantco.suarcrm.core.adapter;version="1.0,2)",com.advantco.sugarcrm.core.error,javax.naming.directory;resolution:=optional
预期产量
com.advantco.base.hci.af.util
javax.security.auth.x500
com.advantco.base.hci.variablesubstitution
com.advantco.base.logging
com.advantco.base.mime
com.advantco.base.net
com.advantco.base.variablesubstitution
com.advantco.suarcrm.core.adapter
com.advantco.sugarcrm.core.error
javax.naming.directory
EDGE测试用例2仍然打开
样本清单文件看起来完全像这样,@anubhavas答案是最接近的,但它也捕获了随后的不需要捕获的导出包。导入的最后一行和导出的第二行也合并在一起,从而产生错误的结果。
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.
core.iface,com.advantco.sugarcrm.core.object.metadata,com.advantco.su
garcrm.core.rest.parser.object,com.advantco.sugarcrm.core.util";versi
on="1.0.0",com.advantco.sugarcrm.core.object.metadata;uses:="com.adva
ntco.sugarcrm.core.object,com.advantco.sugarcrm.core.rest.parser.obje
ct";version="1.0.0",com.advantco.sugarcrm.core.rest;uses:="com.advant
co.base.logging,com.advantco.sugarcrm.core,com.advantco.sugarcrm.core
.object";version="1.0.0",com.advantco.sugarcrm.core.rest.auth;uses:="
com.advantco.base.logging,com.advantco.rest.auth.oauth2,com.advantco.
sugarcrm.core,com.advantco.sugarcrm.core.error,com.advantco.sugarcrm.
core.object";version="1.0.0",com.advantco.sugarcrm.core.rest.metadata
;uses:="com.advantco.base.logging,com.advantco.sugarcrm.core,com.adva
ntco.sugarcrm.core.error,com.advantco.sugarcrm.core.object,com.advant
co.sugarcrm.core.object.metadata,org.json";version="1.0.0",com.advant
co.sugarcrm.core.rest.op;uses:="com.advantco.base,com.advantco.base.l
ogging,com.advantco.base.mime,com.advantco.base.net,com.advantco.rest
,com.advantco.rest.auth.oauth2,com.advantco.sugarcrm.core.error,com.a
dvantco.sugarcrm.core.object,com.advantco.sugarcrm.core.object.metada
ta,com.advantco.sugarcrm.core.rest,com.advantco.sugarcrm.core.rest.pa
rser.object,org.json";version="1.0.0",com.advantco.sugarcrm.core.rest
.op.v10;uses:="com.advantco.base.logging,com.advantco.base.mime,com.a
dvantco.sugarcrm.core.error,com.advantco.sugarcrm.core.object,com.adv
antco.sugarcrm.core.rest.op,org.json";version="1.0.0",com.advantco.su
garcrm.core.rest.parser;uses:="com.advantco.base.logging,com.advantco
.sugarcrm.core.error,com.advantco.sugarcrm.core.object,com.advantco.s
ugarcrm.core.rest";version="1.0.0",com.advantco.sugarcrm.core.rest.pa
rser.chn;uses:="com.advantco.base.logging,com.advantco.sugarcrm.core.
error,com.advantco.sugarcrm.core.object,com.advantco.sugarcrm.core.re
st.parser";version="1.0.0",com.advantco.sugarcrm.core.rest.parser.obj
ect;version="1.0.0",com.advantco.sugarcrm.core.rest.parser.xml;uses:=
"com.advantco.base.logging,com.advantco.sugarcrm.core.error,com.advan
tco.sugarcrm.core.object,com.advantco.sugarcrm.core.object.metadata,c
om.advantco.sugarcrm.core.rest.parser,com.advantco.sugarcrm.core.rest
.parser.object,com.advantco.sugarcrm.core.xml";version="1.0.0",com.ad
vantco.sugarcrm.core.rest.service;uses:="com.advantco.base.logging,co
m.advantco.sugarcrm.core.error,com.advantco.sugarcrm.core.iface,com.a
dvantco.sugarcrm.core.object,com.advantco.sugarcrm.core.rest";version
="1.0.0",com.advantco.sugarcrm.core.result;uses:="com.advantco.base.l
ogging,com.advantco.sugarcrm.core,com.advantco.sugarcrm.core.error,co
m.advantco.sugarcrm.core.object,javax.xml.stream";version="1.0.0",com
.advantco.sugarcrm.core.result.v10;uses:="com.advantco.base.logging,c
om.advantco.sugarcrm.core.error,com.advantco.sugarcrm.core.object,com
.advantco.sugarcrm.core.object.metadata,com.advantco.sugarcrm.core.re
sult,javax.xml.stream";version="1.0.0",com.advantco.sugarcrm.core.ser
vice;uses:="com.advantco.base.logging,com.advantco.sugarcrm.core.ifac
e,com.advantco.sugarcrm.core.object";version="1.0.0",com.advantco.sug
arcrm.core.test;uses:="com.advantco.sugarcrm.core.error,com.advantco.
sugarcrm.core.object";version="1.0.0",com.advantco.sugarcrm.core.util
;uses:="com.advantco.base,com.advantco.base.mime,com.advantco.rest,co
m.advantco.sugarcrm.core,com.advantco.sugarcrm.core.error,com.advantc
o.sugarcrm.core.object,com.advantco.sugarcrm.core.object.metadata,com
.advantco.sugarcrm.core.rest.parser.object,javax.activation,javax.xml
.stream,org.json";version="1.0.0",com.advantco.sugarcrm.core.xml;uses
:="com.advantco.sugarcrm.core.error";version="1.0.0"
Bundle-Name: sugarcrm-core
Bundle-Version: 1.0.0
Build-Jdk: 1.7.0_71
输出
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
答案 0 :(得分:2)
编辑: :由于OP发布了一些不同的输出,因此请立即添加此解决方案。
awk '{while(match($0,/com\.[^;]*/)){print substr($0,RSTART,RLENGTH);$0=substr($0,RSTART+RLENGTH)}}' Input_file
请您尝试以下。
sed 's/;[^)]*)//g;s/)",/ /g;s/",$//;s/",/\n/g' Input_file
输出如下。
com.adntco.aws.core
com.adntco.aws.core.adapter
答案 1 :(得分:1)
您可以使用以下 gnu sed
:
sed -E 's/;([^;"]*"[^"]*")*[^;,]*((,) *){0,1}/\3/g; s/,/\n/g' <<< "$str"
RegEx详细信息:
第一次替换:
;
:匹配文字;
([^;"]*"[^"]*")*
:匹配0个或多个用双引号引起来的字符串[^;,]*
:匹配非;
和,
的0+个字符((,) *){0,1}
:匹配可选的逗号,后跟0+个空格。在第三个捕获组中捕获逗号\3
:替换时,将第三个捕获组放回,逗号或空字符串第二次替换:
s/,/\n/g
:用换行符替换所有逗号示例:1
com.advantco.aws.core
com.advantco.aws.core.adapter
com.advantco.aws.core.adapter.channelreader.receiver
com.advantco.aws.core.adapter.channelreader.sender
com.advantco.aws.core.service
com.advantco.aws.core.service.s3
示例:2
com.advantco.base.hci.af.util
javax.security.auth.x500
com.advantco.base.hci.variablesubstitution
com.advantco.base.logging
com.advantco.base.mime
com.advantco.base.net
com.advantco.base.variablesubstitution
com.advantco.suarcrm.core.adapter
com.advantco.sugarcrm.core.error
javax.naming.directory
答案 2 :(得分:1)
使用Perl
> export data=$(cat sameer.log )
> cat sameer.log
com.advantco.base.hci.af.util;version="[1.0,2)", javax.security.auth.x500;resolution:=optional,com.advantco.base.hci.variablesubstitution,com.advantco.base.logging,com.advantco.base.mime,com.advantco.base.net,com.advantco.base.variablesubstitution,com.advantco.suarcrm.core.adapter;version="1.0,2)",com.advantco.sugarcrm.core.error,javax.naming.directory;resolution:=optional
>
> perl -lne 's/resolution:=optional//g;s/version=.+?\"//g;for(split(/[;, ]/)){ print if not /^\s*$/ } ' <<< "$data"
com.advantco.base.hci.af.util
javax.security.auth.x500
com.advantco.base.hci.variablesubstitution
com.advantco.base.logging
com.advantco.base.mime
com.advantco.base.net
com.advantco.base.variablesubstitution
com.advantco.suarcrm.core.adapter
com.advantco.sugarcrm.core.error
javax.naming.directory
>
答案 3 :(得分:0)
这对我有用:
echo 'com.adntco.aws.core;version="[1.0,2)",com.adntco.aws.core.adapter;version="[1.0,2)",' | tr ';' '\n' | sed 's/version="[^"]*",//g' | tr '\n' ' '
致谢!