首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在htaccess上为一千零一次重定向做SED?

在htaccess上为一千零一次重定向做SED?
EN

Unix & Linux用户
提问于 2020-11-15 07:07:50
回答 2查看 83关注 0票数 -1

在我的一个网站上修改了URLS后,我对它们感到头疼。URL很长,我决定修改它们,尽管后来通过.htacces进行了更改.

我正在逐个改变(我有1500多个网址.)

我有这个:

代码语言:javascript
复制
Redirect 301 /noticies/festes-noticies/diania-roda-les-aixames-la-nit-de-nadal/

这就变成:

代码语言:javascript
复制
Redirect 301 /noticies/festes-noticies/diania-roda-les-aixames-la-nit-de-nadal/ /diania-roda-les-aixames-la-nit-de-nadal/

最后一个/-----/放在行的末尾,有一个空格。

有一个使用sed或其他命令的方法可以很容易地做到这一点吗?

EN

回答 2

Unix & Linux用户

发布于 2020-11-15 07:18:05

sed是强制性的吗?

代码语言:javascript
复制
awk -F/ '{printf "%s /%s/\n",$0,$(NF-1)}' old_file > new_file

仅适用于重定向和重写完整文件的行。

代码语言:javascript
复制
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);但是,我建议您保留原始文件并将版本应用于新文件,如果您对结果感到满意,可以重命名它。

票数 1
EN

Unix & Linux用户

发布于 2020-11-15 09:48:53

使用sed

代码语言:javascript
复制
< input_file sed -E 's#((/[^/]*){2})$#\1 \1#' > output_file
  • /[^/]*匹配一个斜杠,后面跟着零个或多个字符,没有斜杠。
  • (){2}的意思是将表达式插入括号中两次。
  • $与行尾匹配。
  • 外部()允许将作为\1的内部重用到替换部分中。
  • 此外,与斜杠不同的字符(如# )也被用作分隔符,用于此替换,以方便使用。-E支持ERE。
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/619701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档