sed:-e 表达式 #1,字符 113:未知命令:`['

sed:-e 表达式 #1,字符 113:未知命令:`['

我想知道为什么这个代码不起作用,它很简单,但由于某种原因它不起作用。

WIREGUARD_TEMP_NEW_CLIENT_INFO="# ef37a62148810e97daa4deb88fa7f8add6532c39d2feb56d712a0ab1e8f5fd13ec52cfb1751ad3812e21f33a1e0508f14b7d start
[Peer]
PublicKey = L5SCXFRI4Mhyo1nKTjs5d64CSGd36ehC8MD8jg2FbEM=
PresharedKey = 3sejb0srnD3ZHy4I3rydIqy6CPXEHwXWeoX2Yu/2msU=
AllowedIPs = 10.0.0.4/32,fd00:00:00::4/128
# ef37a62148810e97daa4deb88fa7f8add6532c39d2feb56d712a0ab1e8f5fd13ec52cfb1751ad3812e21f33a1e0508f14b7d end"

sed -i "$((6 * 4 - 6 + 11))i${WIREGUARD_TEMP_NEW_CLIENT_INFO}" /etc/wireguard/wg0.conf

我得到的错误是

sed: -e expression #1, char 113: unknown command: `['

代码在做什么?

它只是转到给定的行号并将内容添加到给定的实时号码。

答案1

的第二个参数sed扩展"$((6 * 4 - 6 + 11))i${WIREGUARD_TEMP_NEW_CLIENT_INFO}"为多行字符串:

29i# ef37a62148810e97daa4deb88fa7f8add6532c39d2feb56d712a0ab1e8f5fd13ec52cfb1751ad3812e21f33a1e0508f14b7d start
[Peer]
PublicKey = L5SCXFRI4Mhyo1nKTjs5d64CSGd36ehC8MD8jg2FbEM=
PresharedKey = 3sejb0srnD3ZHy4I3rydIqy6CPXEHwXWeoX2Yu/2msU=
AllowedIPs = 10.0.0.4/32,fd00:00:00::4/128
# ef37a62148810e97daa4deb88fa7f8add6532c39d2feb56d712a0ab1e8f5fd13ec52cfb1751ad3812e21f33a1e0508f14b7d end

sed命令i会在同一行上插入后面的字符串。下一行被解释为新命令sed。由于[Peer]不是有效sed命令,它会发出您看到的错误消息。

答案2

如果有人遇到同样的问题,就需要使用这个代码。

#!/bin/bash

TEMP_VALUE="# ef37a62148810e97daa4deb88fa7f8add6532c39d2feb56d712a0ab1e8f5fd13ec52cfb1751ad3812e21f33a1e0508f14b7d start\n[Peer]\nPublicKey = L5SCXFRI4Mhyo1nKTjs5d64CSGd36ehC8MD8jg2FbEM=\nPresharedKey = 3sejb0srnD3ZHy4I3rydIqy6CPXEHwXWeoX2Yu/2msU=\nAllowedIPs = 10.0.0.4/32,fd00:00:00::4/128\n# ef37a62148810e97daa4deb88fa7f8add6532c39d2feb56d712a0ab1e8f5fd13ec52cfb1751ad3812e21f33a1e0508f14b7d end"
sed -i $((1 + 1))i"${TEMP_VALUE}" file

相关内容