gpt4 book ai didi

shell - Sed 插入多行

转载 作者:行者123 更新时间:2023-12-01 09:11:35 32 4
gpt4 key购买 nike

我正在尝试使用 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: `
'

知道为什么吗?

谢谢你的时间

最佳答案

在 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

关于shell - Sed 插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12249509/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com