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

Linux下如何仅替换URL中协议后的星号(*)?

解决仅替换HTTP(S)协议后紧跟星号的问题

嘿,我懂你的困扰——你需要精准替换掉http://或https://之后紧跟的那个星号,而不是文件里其他位置的星号,之前的sed命令因为没有限定匹配范围,所以会把每行第一个出现的星号都换掉,这显然不符合需求。

正确的sed命令方案

你可以用带正则捕获的sed命令来实现精准匹配:

sed 's/\(https\?:\/\/\)\*/\1replaced/g' inputfile > outputfile

如果你的系统是GNU sed(大多数Linux发行版默认是),也可以用扩展正则表达式(-E选项),写法更简洁:

sed -E 's/(https?:\/\/)\*/\1replaced/g' inputfile > outputfile

命令解释

让我拆解一下这个正则的逻辑:

  • https?:\/\/:匹配http://或者https://——s?表示s字符是可选的,\/\/是转义后的//(因为/在sed的替换命令里是分隔符,所以要转义)。
  • 用括号()把这个协议部分捕获起来,后面可以通过\1引用这段匹配到的内容。
  • \*:匹配紧跟在协议后面的星号(*是正则特殊字符,所以要加反斜杠转义)。
  • \1replaced:把捕获到的协议部分和replaced拼接,替换掉原来的http://*或https://*组合。
  • g标记:表示全局替换(如果一行里有多个符合条件的http://*或https://*,都会被替换;如果每行只有一个,去掉g也可以)。

验证效果

用你的示例测试这个命令:

  • 输入:1,2,http://*.example.org/ → 输出:1,2,http://replaced.example.org/
  • 输入:1,3,https://*.example.org/ → 输出:1,3,https://replaced.example.org/
  • 输入:1,4,https://*.example.org/* → 输出:1,4,https://replaced.example.org/*(后面的星号不受影响)
  • 输入:1,5,https://example.org/*example → 输出:1,5,https://example.org/*example(协议后没有紧跟星号,不替换)

完全符合你的预期需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:17:27