如何用sed正确匹配非#开头行首并添加指定前缀?
问题原因
你的sed命令s/^[^#]/- /逻辑存在问题:^[^#]会匹配行首第一个非#的字符,替换操作会直接把这个字符换成- ,所以才会吃掉行首的第一个字符。
解决方法
给你两种可行的修正命令:
方法1:先筛选目标行再添加前缀
sed -i '' '/^[^#]/s/^/- /' $1
逻辑:先通过/^[^#]/匹配所有行首不是#的行,再对这些行执行s/^/- /,也就是在行首插入- ,完全保留原行的所有字符。
方法2:用捕获组保留原内容
sed -i '' 's/^\([^#].*\)/- \1/' $1
逻辑:用^\([^#].*\)捕获行首非#开头的整行内容,\1引用捕获到的内容,替换后就是- 加上原行的完整内容,不会丢失任何字符。
执行任意一种命令后,都能得到你想要的结果:
## Features - feature:foo - feature: baz
内容的提问来源于stack exchange,提问作者mfaani
相关产品推荐
相关产品推荐

