我正在尝试使用sed进行插入(刚刚读过它)并且我试图插入多行而难以接受?
我目前正在做的是:
sed -i "${line} i\
/* Name - ID */ \
select @ID = NULL \
from Animals \
where VrsnID = @VrsnID \
and Request= \"Request\" \
\
" animalNames.txt
注意echo $line
== 131
新问题
输出中的所有内容都显示在一行中? (也缺少第一个缩进)
/* Name - ID */ select @ID = NULL from Animals where VrsnID = @VrsnID and Request= "Request"
解决
但是这引发了:
sed: -e expression #1, char 47: unknown command: `
'
知道为什么吗?
感谢您的时间
答案 0 :(得分:13)
在shell脚本中,反斜杠+换行符扩展为空。这是一种继续下一行而不实际在字符串中有换行符的方法。所以sed看到的只是一条大线。比较:
$ echo "foo\
> bar"
foobar
$ echo "foo
> bar"
foo
bar
你需要将反斜杠和换行符传递给sed,所以在它之前放入另一个反斜杠来转义反斜杠。
sed -i "${line} i\\
/* Name - ID */ \\
select @ID = NULL \\
from Animals \\
where VrsnID = @VrsnID \\
and Request= \"Request\" \\
" animalNames.txt
如果您将标准输入上的脚本作为here document传递,则可能更具可读性。您需要保留扩展以替换${line}
,因此您仍然需要加倍反斜杠。
sed -i -f - animalNames.txt <<EOF
${line} i\\
/* Name - ID */ \\
select @ID = NULL \\
from Animals \\
where VrsnID = @VrsnID \\
and Request= "Request" \\
EOF
答案 1 :(得分:5)
对于新的麻烦:
使用双反斜杠\\
答案 2 :(得分:1)
这可能对您有用:
sed ${line}'i\
/* Name - ID */ \
select @ID = NULL \
from Animals \
where VrsnID = @VrsnID \
and Request= \"Request\"
' animalNames.txt