[英]SED command error on MACOS X
我试图在MacOSX终端上运行此命令,该终端最初打算在Linux上运行
sed '1 i VISPATH=/mnt/local/gdrive/public/3DVis' init.txt >> ~/.bash_profile
但它给了我错误:
command i expects \ followed by text.
有什么办法可以修改上面的命令在MacOSX终端上工作
避难所是正确的,但还有另一种方法可以做到这一点。 在将字符串传递给sed
之前,您可以使用bash $'...'
引用来解释转义。
所以:
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上的这个答案让我得到了这个解决方案。
有同样的问题,并用brew解决了它:
brew install gnu-sed
gsed YOUR_USUAL_SED_COMMAND
如果要使用sed命令,则可以设置别名:
alias sed=gsed
OSX sed
是基于旧版本的,你需要在你的方向上更加文字,而且你很幸运,在这种情况下, sed
告诉你到底要做什么。 未经测试,因为我没有OSX,但试试
sed '1 i\
VISPATH=/mnt/local/gdrive/public/3DVis
' init.txt >> ~/.bash_profile
通过i
cmd输入由空行终止。 之后可以使用其他sed说明。 注意, \\
char之后没有字符!
另外,@ StephenNiedzielski是对的。 使用单引号字符包装您的sed语句。 (如果你需要在你的sed中进行变量扩展并且可以逃避$
其他用途,那么你也可以使用dbl-quotes,但不建议将其作为常规做法。
编辑
正如我现在所理解的那样,你是从命令行进行的,而不是在脚本或其他编辑器中,我已经测试了上面的内容,并且....我只能说是来自技术支持的着名线路...... “这个对我有用”。 如果您收到错误消息
sed: -e expression #1, char 8: extra characters after command
然后你几乎肯定在\\
之后添加了一些字符。 我刚测试了,我得到了上面的错误信息。 (我使用的是sed的linux版本,因此错误消息完全相同)。 您应该编辑您的问题,以包含命令行的精确剪切粘贴和新的错误消息。 使用单引号不起作用。
IHTH
这是我在OS X上的工作方式。在我的例子中,我需要将文本添加到文件中。 显然,现代sed的工作原理如下:
sed -i '1i text to prepend' file.txt
但是在操作系统XI上必须执行以下操作:
sed -i '' '1i\
text to prepend
' file.txt
看起来你复制了富文本。 单引号应该是直的而不是卷曲的:
sed '1 i VISPATH=/mnt/local/gdrive/public/3DVis'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.