Reputation: 228
What's wrong with the following sed expression? I'm trying to get everything between topic =
and the first semi-colon
that's encountered and then split to result using comma as a delimiter.
sed "s/oc.diffusion.topic = ""(.*)"""";/\1/g"| sed "s/$/,/"
This is the test string:
xchangeCommission = true;oc.diffusion.topic = "Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_.*,Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_all/topic,Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_.*/repub_OC//,Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_all/repub_OC/all,Oddschecker/category_27/event_9945/subevent_63289835/fixture_401188//,Oddschecker/category_27/event_9945/subevent_63289835/fixture_401188/all";var SKY_TRA
Upvotes: 1
Views: 376
Reputation: 45293
Use sed
sed 's/.*oc.diffusion.topic = "\([^"]*\)".*/\1/' file
Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_.*,Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_all/topic,Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_.*/repub_OC//,Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_all/repub_OC/all,Oddschecker/category_27/event_9945/subevent_63289835/fixture_401188//,Oddschecker/category_27/event_9945/subevent_63289835/fixture_401188/all
[^"]*
will maek the command easily to get all chars without double quote. or using grep
grep -Po "(?<=topic = \")[^\"]*" file
sed 's/,/\n/g;s/.*\"\(.*\)\".*/\1/' file
Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_.*
Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_all/topic
Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_.*/repub_OC//
Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_all/repub_OC/all
Oddschecker/category_27/event_9945/subevent_63289835/fixture_401188//
Oddschecker/category_27/event_9945/subevent_63289835/fixture_401188/all
Upvotes: 1
Reputation: 1
Like this?
sed 's/[^"]*"//;s/".*//;y/,/\n/'
or
awk '!/;/' RS='[",]'
Result
Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_.* Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_all/topic Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_.*/repub_OC// Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_all/repub_OC/all Oddschecker/category_27/event_9945/subevent_63289835/fixture_401188// Oddschecker/category_27/event_9945/subevent_63289835/fixture_401188/all
Upvotes: 1
Reputation: 41460
Since the text you have is the only text between quotes you can use this simple awk
awk -F\" '{print $2}' file
Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_.*,Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_all/topic,Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_.*/repub_OC//,Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_all/repub_OC/all,Oddschecker/category_27/event_9945/subevent_63289835/fixture_401188//,Oddschecker/category_27/event_9945/subevent_63289835/fixture_401188/all
Upvotes: 1