Apache 重写规则的模式正则表达式

Apache 重写规则的模式正则表达式

我在几千行上有以下模式我想使用正则表达式转换为我想要的

RewriteRule ^/omg/deadly-venom/?$ http://www.example.com/omg/deadly-venom [L,NC,R=301]
RewriteRule ^/buzz/get-on-it/?$ http://www.example.com/buzz/get-on-it/ [L,NC,R=301]

和其他类似的几千行

所以基本上我想要这个

RewriteRule ^/omg/(deadly-venom)/?$ http://www.example.com/omg/$1 [L,NC,R=301]
RewriteRule ^/buzz/(get-on-it)/?$ http://www.example.com/buzz/$1 [L,NC,R=301]

我该如何实现这一目标?我使用 Sublime 文本编辑器,但也可以在终端中使用 sed 或 awk。

更新:最后一个不应该在像这样的/之前产生双斜杠,相反它仍然应该只是从上面看之前和之后,看看有结尾的行和没有结尾的行$1//$1/$1/

答案1

我会这样做:

sed -E 's|(.*/)([^/]*)(/\?\$.*)\2/{,1}|\1(\2)\3$1|' infile

第二组捕获必须包含在 中的字符串/模式,第三组捕获同一字符串(在 LHS 中(...)反向引用)之后的所有内容,该字符串可能带有尾部斜杠。\2所以,基本上,这会替换\1\2\3\2{0 or 1 slash}\1(\2)\3$1.
如果您sed不支持扩展正则表达式-E

sed 's|\(.*/\)\([^/]*\)\(/?\$.*\)\2/\{,1\}|\1(\2)\3$1|' infile

相关内容