如何使用sed在文件最后一行前插入含制表符和变量的新行
问题原因
你直接把单引号换成双引号报错,是因为双引号下Shell会优先解析以$开头的变量:你写的$i会被Shell当成自身的i变量处理(默认是空值),导致最终传给sed的表达式丢失了$i(最后一行前插入)的命令前缀,触发语法错误。
可行解法
方法1:单双引号拼接(兼容性最好,适配GNU sed/BSD sed)
把不需要变量展开的sed命令部分放在单引号里,需要展开的变量部分放在单引号外、用双引号包裹避免空格等特殊字符问题:
sed '$i \tnewline = '"$newvalue" file
如果你的环境是macOS等自带BSD sed的系统,i命令要求后接反斜杠,调整写法即可:
sed '$i\ \tnewline = '"$newvalue" file
方法2:全双引号写法(需转义sed的$标识)
如果要全用双引号,给代表「文件最后一行」的$加反斜杠转义,避免被Shell提前解析:
sed "\$i \\tnewline = $newvalue" file
方法3:搭配ANSI-C引号(制表符兼容性更佳)
如果你的Shell支持ANSI-C引号(bash/zsh等主流Shell都支持),可以用$' '直接把\t转成实际制表符,避免不同sed版本对\t解析的差异:
sed $'$i \tnewline = '"$newvalue" file
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

