如何在sed的/a命令后添加带前导空格的行?
问题解决:用sed的
a命令添加带前导空格的行 你的问题出在shell对空格的解析上——未被引号包裹的前导空格会被shell当作分隔符忽略,导致sed实际接收到的内容丢失了空格。要保留前导空格,只需把整个sed脚本用单引号括起来,让shell原封不动地传递内容给sed。
正确命令(GNU sed适用)
sed -i '/comment : "Blabla" ;/a\ leakage_power_unit : "1nW";' "$file"
或者更简洁的GNU sed写法(无需反斜杠):
sed -i '/comment : "Blabla" ;/a leakage_power_unit : "1nW";' "$file"
为什么原来的命令失效?
你之前的命令:
sed -i {/comment : "Blabla" ;/a leakage_power_unit : "1nW";} $file
大括号内的内容没有被引号包裹,shell会把a后面的前导空格当作分隔符去掉,sed最终执行的是a leakage_power_unit...,自然没有前导空格。用单引号包裹整个sed表达式后,shell不会解析内部的空格和引号,前导空格就能完整传递给sed。
补充说明(兼容POSIX标准sed)
如果需要适配BSD sed这类遵循POSIX标准的版本,必须在a后面加反斜杠,再换行写要添加的内容(或用反斜杠转义换行):
sed -i '' '/comment : "Blabla" ;/a\ leakage_power_unit : "1nW";' "$file"
注意BSD sed的-i参数需要加空字符串作为备份后缀(不需要备份文件时)。
内容的提问来源于stack exchange,提问作者miguelfcp
相关产品推荐
相关产品推荐

