我在shell脚本中使用此命令
lnum=5
str="Hello foo"
filename="/path/fiename"
sed -i "$lnum i $str" $filename
收到下面的错误
sed: -e expression #1, char 3: : doesn't want any addresses
我以前曾使用此命令为它工作得很好其他脚本,唯一的变化我发这个时间是文件名具有对文件的路径,但我刚刚进入的路径给出文件名,而不是路试了一下和执行脚本但它仍然无法正常工作
我无法解决它可以帮助人
如果您使用的OSX,BSD(和AIX)版本的sed
,对于备份扩展-i
就地编辑标志不可选的 。
GNU sed
这个我相信是不同的,因此该脚本可以在Linux上运行。
这是一个有点便携痛苦的-但它在BSD衍生与“就地”编辑变得更糟sed
使用。 这个版本sed
可以说在某些方面更“标准”(如:“跨POSIX系统最小公分母”),但这种行为似乎是一个错误:
sed: 1: "5 i hello foo": command i expects \ followed by text
这里是我做几个BSD的脚本工作:
lnum="5"
str="Hello foo"
filename="sed-mess.txt"
sed -i "" "$lnum i\^M
$str" $filename
我不得不进入有文字行结束字符Ctrl-v [Return]
来获得i
命令,因为工作\
是必需的,必须有没有跟随它。 不知道怎么GNU sed
会处理这个问题。
你可以使用perl
? ;-)
老屁使用编辑这种类型的问题:
猫的/ tmp /样品
#!/bin/ksh
lnum=5
str="Hello bar"
filename="/tmp/foo"
ed - $filename <<EOF
$lnum
i
$str
.
w
q
EOF
猫的/ tmp /富
line
line
line
line
line
line
line
line
line
WC / TMP /富
9 9 45 /tmp/foo
的/ tmp /样品
line
WC / TMP /富
10 11 55 /tmp/foo
猫的/ tmp /富
line
line
line
line
Hello bar
line
line
line
line
line
i
是“插入”,而前a
是“追加”后。 我不知道sed的i命令究竟做了什么,但我希望这将是一样的i
希望这可以帮助