Sed, чтобы удалить все между двумя не буквенно-цифровыми символами - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть следующая строка:

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

Мне нужно сопоставить несколько совпадений в одной строке.Что я здесь не так делаю?

Обновление 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

Ответы [ 4 ]

0 голосов
/ 12 декабря 2018

Использование 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
>
0 голосов
/ 11 декабря 2018

Это работает для меня:

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

С уважением!

0 голосов
/ 11 декабря 2018

Вы можете использовать это gnu sed:

sed -E 's/;([^;"]*"[^"]*")*[^;,]*((,) *){0,1}/\3/g; s/,/\n/g' <<< "$str"

Подробности RegEx:

1-я замена:

  • ;: совпадение литерала ;
  • ([^;"]*"[^"]*")*: сопоставление 0 или более строк, заключенных в двойные кавычки
  • [^;,]*: сопоставление 0+символы, которые не являются ; и ,
  • ((,) *){0,1}: соответствует необязательной запятой, за которой следует пробел 0+.Захватывает запятую в 3-й группе захвата
  • \3: При замене возвращает 3-ю группу захвата, которая является запятой или пустой строкой

2-я замена:

  • 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
0 голосов
/ 11 декабря 2018

РЕДАКТИРОВАТЬ: Поскольку 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...