如何形成包含转义字符的 sed 表达式

sta*_*fry 4 sed

给定一个 sed 表达式(以及 ArchLinux 上的 GNU sed 4.2.2)

/match/i\tline1\n\tline2
Run Code Online (Sandbox Code Playgroud)

这应该在匹配项上方插入两个制表符缩进的行,我发现第一个字符(在示例中,\t)的转义被忽略,但所有其他转义字符都被正确处理。

像这样测试:

echo match | sed -e '/match/i\tline1\n\tline2'
Run Code Online (Sandbox Code Playgroud)

结果是

tline1
    line2
match
Run Code Online (Sandbox Code Playgroud)

无论初始转义字符是什么(例如制表符或换行符),结果都是相同的。构造表达式以便正确处理第一个字符的正确方法是什么?

gle*_*man 5

检查 gnu sed 手册(http://www.gnu.org/software/sed/manual/html_node/Other-Commands.html#Other-Commands)——i命令实际上是i\命令,所以你只需要一个额外的反斜杠

echo match | sed -e '/match/i\\tline1\n\tline2'
# ---------------------------^
Run Code Online (Sandbox Code Playgroud)