MACOS X上的SED命令错误

时间:2013-02-13 04:17:32

标签: macos sed

我正在尝试在MacOSX终端上运行此命令,该终端最初打算在Linux上运行

sed '1 i VISPATH=/mnt/local/gdrive/public/3DVis' init.txt >> ~/.bash_profile

但它给了我错误:

command i expects \ followed by text. 

有什么方法可以修改上面的命令在MacOSX终端上工作

5 个答案:

答案 0 :(得分:31)

住房是正确的,但还有其他办法。在将字符串传递给$'...'之前,您可以使用bash sed引号来解释转义。

所以:

         sed -iold '1i\'$'\n''text to prepend'$'\n' file.txt
                      ^^^^^^^^                     ^
                     / |\|||/ \                    |__ No need to reopen
                     | | \|/  |                          string to sed
     Tells sed to    | |  |   |
    escape the next _/ |  |   +-----------------------------+
         char          |  +-------------+                   |
                       |                |                   |
                  Close string   The  special bash   Reopen string to
                     to sed       newline char to      send to sed
                                    send to sed
unix.stackexchange.com上的

This answer让我得到了这个解决方案。

答案 1 :(得分:12)

遇到同样的问题并用brew解决了它:

brew install gnu-sed

gsed YOUR_USUAL_SED_COMMAND

如果要使用sed命令,则可以设置别名:

alias sed=gsed

答案 2 :(得分:5)

OSX sed基于旧版本,你需要在你的方向上更加文字化,而且你很幸运,在这种情况下,sed正在告诉你究竟是什么去做。未经测试,因为我没有OSX,但请尝试

sed '1 i\
VISPATH=/mnt/local/gdrive/public/3DVis

' init.txt >> ~/.bash_profile

通过i cmd的输入以空行终止。之后可以使用其他sed说明。注意,\ char之后没有字符!

另外,@ StetinNiedzielski是对的。使用单引号字符包装您的sed语句。 (如果你需要在你的sed中进行变量扩展并且可以逃避$的其他用途,那么你也可以使用dbl-quotes,但不推荐它作为正常做法。

修改

我现在明白,你是从命令行做的,而不是在脚本或其他编辑器中,我已经测试了上面的内容,而且......我只能说是来自技术支持的着名系列... “这个对我有用”。如果您收到错误消息

sed: -e expression #1, char 8: extra characters after command

然后你几乎肯定在\之后加了一些字符。我刚测试了,我得到了上面的错误信息。 (我使用的是sed的linux版本,因此错误消息完全相同)。您应该编辑您的问题,以包含命令行的精确剪切粘贴和错误消息。使用单引号不起作用。

IHTH

答案 3 :(得分:4)

以下是我在OS X上的工作方式。在我的例子中,我需要将文本添加到文件中。显然,现代sed的工作原理如下:

sed -i '1i text to prepend' file.txt

但在OS X上我必须做以下事情:

sed -i '' '1i\
text to prepend
' file.txt

答案 4 :(得分:1)

看起来你复制了富文本。单引号应该是直的而不是卷曲的:

sed '1 i VISPATH=/mnt/local/gdrive/public/3DVis'