使用Sed删除两个非字母数字字符之间的传递

时间:2018-12-11 14:38:55

标签: bash awk 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)"

;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

4 个答案:

答案 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' ' '

致谢!