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

如何用sed正确匹配非#开头行首并添加指定前缀?

问题原因

你的sed命令s/^[^#]/- /逻辑存在问题:^[^#]会匹配行首第一个非#的字符,替换操作会直接把这个字符换成- ,所以才会吃掉行首的第一个字符。

解决方法

给你两种可行的修正命令:

方法1:先筛选目标行再添加前缀

sed -i '' '/^[^#]/s/^/- /' $1

逻辑:先通过/^[^#]/匹配所有行首不是#的行,再对这些行执行s/^/- /,也就是在行首插入- ,完全保留原行的所有字符。

方法2:用捕获组保留原内容

sed -i '' 's/^\([^#].*\)/- \1/' $1

逻辑:用^\([^#].*\)捕获行首非#开头的整行内容,\1引用捕获到的内容,替换后就是- 加上原行的完整内容,不会丢失任何字符。

执行任意一种命令后,都能得到你想要的结果:

## Features
- feature:foo
- feature: baz

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:01:18