2017-02-22 39 views
0

让我从我正在尝试做的事开始。
我有一个sed语句来查找特定行,然后更改它下面的行。为此,我首先删除它下面的行并追加我想要的行。通过给出未终止替换模式的函数执行sed

sed -e '/'"$rootline"'/ {N;s/\n.*//;}' -e '/'"$rootline"'/ a\ 
'"$1 $linetoadd" <tmpmain >tmpsec 

这里第一个表达式在$ rootline中找到一个带有表达式的行,然后删除下一行。表达式2在$ lineline后添加我想添加的行。
以前我把它放在一个单独的.sh文件中,当我用sudo调用文件(在文件中使用sudo对其他重要操作进行操作)时,它可以很好地工作。
现在我试图把它放在一个函数中,并通过相同的.sh文件调用它。用sudo调用函数我使用这个answer。一切似乎是工作的罚款与问候的功能的sudo的一部分,但是当它涉及到上述指定的SED操作,我得到以下

sed: 1: "/root ALL=/ {N;s/ 
.*//;} 
": unterminated substitute pattern #$rootline='root ALL=' 

为什么我收到此错误的任何线索?

注:我工作的Mac OS X

回答

0

我得到了错误。实际上很傻。
我在函数上使用sudo的方式是将函数的内容回显到文件中。 Got it from here.
并且当它将以下代码回显到文件中时。

sed -e '/'"$rootline"'/ {N;s/\n.*//;}' -e '/'"$rootline"'/ a\ 
'"$1 $linetoadd" <tmpmain >tmpsec 

它将'\ n'作为新行字符本身并打印新行而不是“\ n”,因此发生sed错误。