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

如何使用sed在bash脚本的括号内添加单引号?

用sed给括号内内容添加单引号的解决方案

没问题,这事儿用sed完全能搞定!我给你两个实用的命令,再拆解下语法细节,保证你能直接套用。

核心命令(两种写法)

写法1:基本正则表达式(兼容所有sed版本)

如果你的系统是Linux或者默认使用GNU sed,直接用这个命令处理文本:

sed "s/\(\([^)]*\)\)/('\1')/g" your_input.txt

要是需要直接修改bash脚本文件(原地替换),加上-i参数:

sed -i "s/\(\([^)]*\)\)/('\1')/g" your_script.sh

Mac用户注意:Mac的sed是BSD版本,-i后面需要加空字符串参数:

sed -i "" "s/\(\([^)]*\)\)/('\1')/g" your_script.sh

写法2:扩展正则表达式(更简洁)

用-E选项开启扩展正则,语法更直观,不用转义捕获组的括号:

sed -E "s/([^)]*)/('\1')/g" your_input.txt

原地修改文件的版本:

sed -i -E "s/([^)]*)/('\1')/g" your_script.sh
# Mac用户:sed -i "" -E "s/([^)]*)/('\1')/g" your_script.sh

效果演示

比如输入字符串:

MYSTRING(FOO_1234_BAR)

执行命令后会输出:

MYSTRING('FOO_1234_BAR')

语法拆解

拿扩展正则的写法来解释,更易懂:

  • s/.../.../g:sed的替换命令,g表示全局替换(如果一行有多个括号对,都会被处理)
  • ([^)]*):正则匹配部分,其中:
    • ( 和 ):这里是扩展正则的捕获组标记,用来抓取括号里的内容
    • [^)]*:匹配除了右括号)之外的任意字符,刚好对应括号内的内容
  • ('\1'):替换后的内容,\1代表刚才捕获的括号内的内容,我们给它前后加上单引号,再用括号包裹,就得到了('XXX')的格式

注意事项

  • 如果你的括号内包含特殊字符(比如空格、感叹号),[^)]*依然能正常工作,因为它只排除右括号
  • 如果脚本里有嵌套括号(比如A(B(C))),这个正则只会处理最外层的括号对,要是需要处理嵌套场景,得用更复杂的正则,但一般业务场景下这个命令足够用了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:31:47