使用sed进行替换追加操作时如何保留目标内容的前导空格
空格丢失是sed a(追加)命令的默认行为,sed解析a后的参数时会自动丢弃插入内容的前导空白。
对应解决方案
场景1:需要在匹配'hello'的行后追加带前导空格的内容
在插入内容的最前面加一个反斜杠\,即可告诉sed保留后续的前导空格:
sed "/'hello',/a\ 'good bye'" myfile.txt
如果使用的是macOS自带的BSD sed,需要在反斜杠后加换行再写插入内容:
sed "/'hello',/a\ 'good bye'" myfile.txt
场景2:需要直接将'hello'替换为带前导空格的内容
更推荐使用替换命令s,不会出现前导空格丢失的问题:
# 替换行内所有匹配的'hello' sed "s/'hello'/ 'good bye'/g" myfile.txt # 替换整行完全匹配'hello'的行 sed "/^'hello'$/c\ 'good bye'" myfile.txt
如果需要直接修改原文件,GNU sed(Linux发行版默认内置)追加-i参数即可,BSD sed(macOS默认内置)需追加-i ''参数。
内容的提问来源于stack exchange,提问作者user17049514
相关产品推荐
相关产品推荐

