使用Sed获取两个字符串之间的字符串并拆分
下面的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
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 -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