掌握SED表达错误(Getting an error with sed expression)

2019-10-30 07:21发布

我在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

我以前曾使用此命令为它工作得很好其他脚本,唯一的变化我发这个时间是文件名具有对文件的路径,但我刚刚进入的路径给出文件名,而不是路试了一下和执行脚本但它仍然无法正常工作

我无法解决它可以帮助人

Answer 1:

如果您使用的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 ? ;-)



Answer 2:

老屁使用编辑这种类型的问题:

猫的/ 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

希望这可以帮助



文章来源: Getting an error with sed expression