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

时间:2010-05-28 05:50:37

标签: 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
EFGH,5678,http://example.com/wer.ext
EFGH,5678,http://example/ljn.ext

简而言之,我需要将所有内容捕获到网址中。然后我需要捕获每个URL并将它们放在自己的行上,并使用前导捕获。

我正在使用sed这样做,我无法弄清楚如何让它正常工作。有什么想法吗?

3 个答案:

答案 0 :(得分:5)

如果每行中的URL数量保证为2,您可以使用:

sed -r "s/([A-Z0-9,]{10})(.+\.ext)(.+\.ext)/\1\2\n\1\3/" < input

答案 1 :(得分:1)

这不要求前两个字段是特定宽度或限制逗号之间的(非逗号)字符集。相反,它键入了逗号本身。

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

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

答案 2 :(得分:0)

目前我还没有可用的。

岂不

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

诀窍?

修改删除了延迟量词