为什么 sed -i "1i \t 'word'" 文件中不能有 Tab ?

为什么 sed -i "1i \t 'word'" 文件中不能有 Tab ?

伪代码

printf "Masi \nwas \nhere" > /tmp/2
sed -i "1i \tword \t 'include word'" /tmp/2

预期输出:第一个 之前的制表符word。输出:tword 'include word'。尝试使用变量来解决too-few-ticks-问题

printf "masi \nwas \nhere" > /tmp/2
sentence="\tword \t 'include word'"
sed -i "1i $sentence" /tmp/2

输出:同样的问题tword 'include word'

答案1

虽然sed可能能够\t用正则表达式进行解释,但您的脚本都没有以这种方式使用它。相反,它用作\t文字字符串。

你可以像这样做你想做的事:

printf "Masi \nwas \nhere" > /tmp/2
sed -i "1i XwordXinclude word'" /tmp/2
sed -i '1,1s/X/\t/g' /tmp/2

答案2

使用 GNU sed

sed -i '1i\\t'$sentence /tmp/2

或者

sed -i "1i\\\t$sentence" /tmp/2

要插入的文本从第一个之后开始\。单引号该sed脚本可阻止您的 shell 使用 执行操作\t(或插入另一个,\如上面的第二个示例所示)。使用单引号$sentencesed脚本连接,以便 shell 对其进行扩展。

相关内容