Debian 9环境下如何用sed/awk实现无修剪空格的文本追加?
解决Debian 9中sed追加文本时开头空格被修剪的问题
我来帮你搞定这个空格被修剪的问题——在使用sed的a命令追加内容时,开头空格会被sed当作命令分隔符忽略掉,这就是你遇到的问题根源。下面给你几个实用的解决方案,全部用系统预装工具就能实现:
方法一:修正sed的a命令语法
在a命令后面加上反斜杠\,然后直接跟上你要保留的空格和内容,这样sed就会把开头空格当作追加文本的一部分保留下来:
sed '/"start":/a \ "start:prod": "hello",' package.json
这里的四个空格(或者你需要的缩进数量)会被完整保留,追加后就能得到符合格式的结果。
方法二:用sed替换行尾实现追加
另一种思路是匹配到目标行后,在该行末尾添加换行和带缩进的内容,这种方式不需要处理sed的命令分隔问题,空格会被完整保留:
sed '/"start":/s/$/\n "start:prod": "hello",/' package.json
这个命令的逻辑是:找到包含"start":的行,把行尾($)替换成换行符\n加上你要追加的缩进内容,完美保留空格。
方法三:用awk实现更直观的追加
如果觉得sed的语法有点绕,用awk会更直观——匹配到目标行后,先打印原行,再打印带缩进的新行,其他行正常输出:
awk '/"start":/{print; print " \"start:prod\": \"hello\","; next}1' package.json
这里的next用来跳过默认的打印逻辑,确保目标行只打印原行和新行,其他行通过1触发默认打印。
测试一下这些命令,你就能得到符合期望的缩进格式了。
内容的提问来源于stack exchange,提问作者Dimitri Kopriwa
相关产品推荐
相关产品推荐

