Regex 正则表达式-捕获和替换选择序列

Regex 正则表达式-捕获和替换选择序列,regex,sed,Regex,Sed,以下面的文件 ABCD,1234,http://example.com/mpe.exthttp://example/xyz.ext EFGH,5678,http://example.com/wer.exthttp://example/ljn.ext 请注意,“ext”在整个文件中是一个恒定的文件扩展名 我正在寻找一个表达式,将该文件转换成这样的东西 ABCD,1234,http://example.com/mpe.ext ABCD,1234,http://example/xyz.ext EFG

以下面的文件

ABCD,1234,http://example.com/mpe.exthttp://example/xyz.ext
EFGH,5678,http://example.com/wer.exthttp://example/ljn.ext
请注意,“ext”在整个文件中是一个恒定的文件扩展名

我正在寻找一个表达式,将该文件转换成这样的东西

ABCD,1234,http://example.com/mpe.ext
ABCD,1234,http://example/xyz.ext
EFGH,5678,http://example.com/wer.ext
EFGH,5678,http://example/ljn.ext
简而言之,我需要捕获到URL的所有内容。然后,我需要捕获每个URL,并将它们放在自己的行中,并使用主要捕获


我正在与sed合作来完成这项工作,但我不知道如何使其正常工作。有什么想法吗?

我目前没有可用的sed

不会

sed -r 's/(....),(....),(.*\.ext)(http.*\.ext)/\1,\2,\3\n\1,\2,\4/g' 
玩这个把戏


编辑:删除惰性量词

如果保证每行中的URL数为两个,则可以使用:

sed -r "s/([A-Z0-9,]{10})(.+\.ext)(.+\.ext)/\1\2\n\1\3/" < input
sed-r“s/([A-Z0-9,]{10})(.+\.ext)(.+\.ext)/\1\2\n\1\3/”
这不要求前两个字段为特定宽度,也不限制逗号之间的(非逗号)字符集。相反,它会在逗号本身上键入

sed 's/\(\([^,]*,\)\{2\}\)\(.*\.ext\)\(http:.*\)/\1\3\n\1\4/' inputfile.txt

您可以更改“2”以匹配任意数量的逗号分隔字段。

是否必须使用sed?一个支持超过POSIX/GNU基本正则表达式的工具可以很容易地做到这一点。这是个好主意(我希望URL前面的部分就是这个常量)。但是我认为sed不支持懒惰的量词。