You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed/grep/正则删除链接中第n次(4/5次)斜杠后的内容?

解决方法:用sed或awk截断超链接至第n次斜杠

问题分析

你尝试的grep命令未生效,原因是正则表达式包含了.*$,导致grep -o输出整个匹配的行(和原内容一致),且无法处理斜杠数量不足的情况。

方案1:使用sed命令

要保留第5次斜杠(含)之前的内容,同时斜杠少于4个时保留完整链接,可以用以下sed命令:

sed -E 's/^(([^\/]*\/){5}).*/\1/' text.txt

解释:

  • -E:启用扩展正则表达式,避免多余转义
  • ^(([^\/]*\/){5}):匹配开头的5组「非斜杠字符+斜杠」的内容,对应到第5次斜杠结束的位置
  • .*:匹配第5次斜杠后的所有内容
  • \1:替换为前面捕获的第5次斜杠前的部分
  • 对于斜杠数量不足5的行,正则不匹配,sed会直接输出原行,满足额外要求

测试示例输入:
输入:

https://www.forbes.com/forbes/welcome/?toURL=https://forbes.com/&refURL=&referrer=
https://example.com
https://a/b/c

输出:

https://www.forbes.com/forbes/welcome/
https://example.com
https://a/b/c

方案2:使用awk命令

如果觉得正则逻辑不好理解,awk通过分割字段的方式更直观:

awk -F '/' '{if (NF >= 6) {printf "%s/%s/%s/%s/%s/\n", $1, $2, $3, $4, $5} else {print $0}}' text.txt

解释:

  • -F '/':用斜杠作为字段分隔符
  • NF:当前行的字段总数,NF >=6意味着斜杠数量≥5(字段数=斜杠数+1)
  • 当字段数足够时,拼接前5个字段并加上结尾的斜杠;否则输出原行

调整n值(如第4次斜杠)

如果需要保留到第4次斜杠,只需修改命令中的数字:

  • sed命令:将{5}改为{4}
  • awk命令:将NF >=6改为NF >=5,拼接前4个字段:printf "%s/%s/%s/%s/\n", $1, $2, $3, $4

内容的提问来源于stack exchange,提问作者Muhammad Yaseen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:09:22