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

如何使用sed仅替换单引号内字符串中的指定子串?

用sed实现仅替换单引号内的指定子串

我来给你分享一个精准解决需求的sed方案:只替换单引号包裹内容里的目标子串(比如把YouTube换成you_tube),单引号外的内容完全不动,甚至能处理单引号内有多个目标子串的情况。

核心命令

直接用这条命令就可以搞定(把input.txt换成你的目标文件名,或者用管道传递输入):

sed -E "
:loop
s/'([^']*?)YouTube([^']*)'/'\1you_tube\2'/
t loop
" input.txt

命令逻辑拆解

  • :loop:先定义一个循环标签,方便后续重复执行替换操作
  • s/'([^']*?)YouTube([^']*)'/'\1you_tube\2'/:
    • 正则部分'([^']*?)YouTube([^']*)'专门匹配单引号内包含YouTube的片段,[^']*?是非贪婪匹配,确保不会跨多个单引号对(比如不会把'a' 'b'当成一个整体)
    • 替换时保留单引号内的其他内容,只把捕获到的YouTube换成you_tube
  • t loop:如果上一次替换成功了,就跳回loop标签继续循环,直到单引号内再也找不到YouTube为止

实际效果示例

原文本:

This is a YouTube video referenced by the 'movies.YouTube_id' column and 'YouTube.channel' too.

执行命令后输出:

This is a YouTube video referenced by the 'movies.you_tube_id' column and 'you_tube.channel' too.

你看,单引号外的YouTube完全没动,只有单引号里的目标子串被精准替换了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:06:44