正規表現を使用して目的に変換したい数千行に次のパターンがあります。
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
2番目のグループは含める必要がある文字列/パターンをキャプチャし、3番目のグループは(...)
同じ文字列(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