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不支持懒惰的量词。