我在外壳程序脚本中使用此命令
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
我之前曾在其他脚本上使用过此命令,但该脚本运行良好,这次我所做的唯一更改是文件名具有文件的路径,但是我尝试通过仅给出文件名而不是路径来尝试进入路径和执行脚本,但仍然无法正常工作
我无法解决,任何人都可以帮忙
最佳答案
如果使用的是sed
的OSX,BSD(和AIX)版本,则-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
吗? ;-)关于linux - sed表达式出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17470697/