在我的一个网站上更改 URL 后,我对 URL 感到头疼。 URL 非常长,尽管后来通过 .htacces 进行了更改,但我还是决定更改它们...
我正在一一进行更改(我有超过 1500 个 URL...)
我有这个:
Redirect 301 /noticies/festes-noticies/diania-roda-les-aixames-la-nit-de-nadal/
这变成:
Redirect 301 /noticies/festes-noticies/diania-roda-les-aixames-la-nit-de-nadal/ /diania-roda-les-aixames-la-nit-de-nadal/
最后一个/-----/
, 放在行的末尾,有一个空格。
有一种使用 sed 或其他命令的方法可以轻松地做到这一点吗?
答案1
使用sed
:
< input_file sed -E 's#((/[^/]*){2})$#\1 \1#' > output_file
/[^/]*
匹配斜杠后跟零个或多个不带斜杠的字符。(){2}
表示将表达式放入括号两次。$
匹配行尾。- 外部
()
允许将内部的东西重新用于\1
替换部件。 #
为了方便起见,还使用与斜杠不同的字符(例如)作为此替换中的分隔符。并-E
启用 ERE。
答案2
是sed
强制性的 ?
awk -F/ '{printf "%s /%s/\n",$0,$(NF-1)}' old_file > new_file
仅适用于重定向行并重写完整文件。
awk -F/ '$1 ~ /Redirect/ {printf "%s /%s/\n",$0,$(NF-1); next ; } {print}' old_file > new_file
在哪里
-F/
告诉 awk 用作/
字段分隔符$0
,$(NF-1)
是整行,在最后一个字段之前$1 ~ /Redirect/
选择带有重定向的行next
转到下一行{print}
隐式打印行不匹配Redirect
编辑:如果原始行以尾随结尾/
,我们需要选择最后一个字段之前的字段。
注意有些awk
可以就地编辑(awk -i
);但是我建议您保留原始文件并将版本应用到新文件,如果您对结果满意则重命名它。