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

如何用Perl/Sed/Awk替换Bash变量$text中的所有URL为“URL”

实现方法(无需分别处理HTTP/HTTPS)

不用单独针对http://和https://编写规则,通过正则表达式https?://即可同时匹配两种协议(s?表示s字符可选),再配合匹配URL剩余部分的规则就能完成批量替换。

1. 纯Bash参数展开(无需外部工具)

直接利用Bash内置的参数替换功能,无需调用额外工具:

text="blah blah blah https://www.stackoverflow.com blah http://example.com test"
text=${text//https?:\/\/[^[:space:]]+/URL}
echo "$text"

说明:[^[:space:]]+用于匹配URL中直到下一个空格的所有字符,确保只替换完整的URL片段。

2. Sed命令

通过sed的扩展正则匹配两种协议,完成全局替换:

text="blah blah blah https://www.stackoverflow.com blah http://example.com test"
text=$(echo "$text" | sed -E 's/https?:\/\/[^[:space:]]+/URL/g')
echo "$text"

说明:-E启用扩展正则语法,g标志表示替换所有匹配项(而非仅第一个)。

3. Perl命令

Perl的正则处理更简洁,用\S+匹配非空白字符组成的URL部分:

text="blah blah blah https://www.stackoverflow.com blah http://example.com test"
text=$(echo "$text" | perl -pe 's/https?:\/\/\S+/URL/g')
echo "$text"

说明:\S+等价于[^[:space:]]+,写法更紧凑,同样能匹配到URL的结束位置。

4. Awk命令

通过遍历文本字段,匹配并替换符合条件的URL:

text="blah blah blah https://www.stackoverflow.com blah http://example.com test"
text=$(echo "$text" | awk '{for(i=1;i<=NF;i++) if($i~/^https?:\/\//) $i="URL"}1')
echo "$text"

说明:遍历每个字段,判断是否以http://或https://开头,是则替换为URL,最后1表示输出处理后的整行内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:06:17