使用Sed获取两个字符串之间的字符串并拆分

使用Sed获取两个字符串之间的字符串并拆分,sed,Sed,下面的sed表达式有什么问题?我正在尝试获取topic=和遇到的第一个分号之间的所有内容,然后使用逗号作为分隔符拆分结果 sed "s/oc.diffusion.topic = ""(.*)"""";/\1/g"| sed "s/$/,/" 这是测试字符串: xchangeCommission = true;oc.diffusion.topic = "Oddschecker/category_27/event_9945/subevent_63289835/market_175820189

下面的sed表达式有什么问题?我正在尝试获取
topic=
和遇到的
第一个分号
之间的所有内容,然后使用逗号作为分隔符拆分结果

sed "s/oc.diffusion.topic = ""(.*)"""";/\1/g"| sed "s/$/,/"
这是测试字符串:

   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
使用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
解释
  • [^”]*
    可以轻松地调用命令,无需双引号即可获取所有字符
或者使用grep

grep -Po "(?<=topic = \")[^\"]*" file

由于您拥有的文本是引号之间的唯一文本,因此您可以使用此简单的
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
像这样

sed的/[^”]*“/;s/”*/;y/,/\n/'

awk'!/;/'RS='[“,]”
结果

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 Oddschecker/类别27/活动9945/子活动63289835/市场1758201893/赌注* Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_all/topic Oddschecker/category_27/事件_9945/子事件_63289835/市场_1758201893/赌注.*/共和国奥委会// Oddschecker/category_27/event_9945/subevent_63289835/market_1758201893/bet_all/repub_OC/all Oddschecker/类别27/活动9945/子活动63289835/固定装置401188// Oddschecker/类别27/活动9945/子活动63289835/固定装置401188/所有
你告诉我们出了什么问题。意外的结果?根本没有结果?一个错误?。grep命令有效,但我必须将两个“双引号”字符加倍,因为我正在bat文件中执行此操作。尽管如此,它仍然不会拆分逗号上的字符串。以下操作有效:
grep-Po”(?第一个sed和grep命令生成结果以获取双引号之间的内容。最后一个sed执行所有作业(包括在逗号上拆分字符串),你试过第二个sed命令了吗?试过了。它不起作用。我需要找出在DOS和Linux以及shell和bat中运行这个命令的区别。在转义字符方面有一个约定,我不知道。
在DOS中
你的意思是在windows中吗?我在windows中的CYGWIN中进行了测试。你有什么sed?是针对windows的sed,还是CYGWIN中的sed?我想它是GNUWIN或GNUUTILS Sed。它说的是
GNU Sed版本4.2.1
。如果文本OP like前后没有
,该怎么办?如果文本中有
,这两个文件都会归档。 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