首页 > 解决方案 > Sed 删除两个非字母数字字符之间的所有内容

问题描述

我有以下字符串:

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)"

需要在;versional 之后删除所有内容,直到",
基本上只需要获取所有包名称,输出就可以了

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)"

为个别评论添加了其他详细信息

边缘测试用例对于我的一些导入来说这是失败的,所以边缘测试用例在你有分辨率=可选而不是版本的地方的例子..

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

标签: bashawksed

解决方案


编辑:由于 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

推荐阅读