我如何在这个问题中使用sed?(错误:“.csv”:无效的命令代码)
在OS X上,可能与sed命令无关。在OS X版本的sed中,-i选项需要一个扩展名参数,因此您的命令实际上被解析为扩展名参数,文件路径被解释为命令代码。
尝试显式添加-e参数,并将''作为参数添加到-i中:
find ./ -type f -exec sed -i '' -e "s/192.168.20.1/new.domain.com/" {} \;
参考这个链接:[stackoverflow.com/questions/7573368](https://stackoverflow.com/questions/7573368)
然而,您给出的示例命令给出了sed: RE error: illegal byte sequence错误。
这很可能是复制粘贴编码问题,因为在我的测试中没有任何问题。参考这个链接:[stackoverflow.com/questions/11287564](http://stackoverflow.com/questions/11287564)
如果您像我一样花了10分钟找差异,那就是-e选项。
我更新了我的答案,明确介绍了-e选项。
这个问题回答了在MacOS上出现的RE error: illegal byte sequence问题:[stackoverflow.com/questions/19242275](http://stackoverflow.com/questions/19242275)
我使用一个空字符串''作为-i的参数,并且它起作用了,比如sed -i '' 's/blah/xx/g'
对我来说,在-i后面添加-e会导致sed备份所有被修改的文件,例如:"foo.txt" -> "foo.txt-e"。显然,我想要的是-i '',即不备份修改的文件。
我绝对是使用默认的OS X sed,而不是homebrew'd。Mavericks 10.9.3(也许sed在不同的OS X版本中有所不同?)。别担心,我已经添加了我想要的答案(我猜它也会解决问题)。
对我也是一样的问题。这个-i -e结合使用find命令导致许多文件以-e-e-e-e-e-e-e结尾。
同样,在使用10.10附带的sed时也有同样的问题。我推荐-i ''。
我觉得有趣的是你编辑了你的答案,让它看起来像我的:[stackoverflow.com/posts/19457213/revisions](http://stackoverflow.com/posts/19457213/revisions) 无论如何,只要用户解决了他们的问题,我就不在乎。干杯!
在OS X上,您可以通过安装GNU版本的一切来解决这个问题,包括sed。
在OS X上可以使用以下命令解决问题:find ./ -type f -exec sed -ie "s/192.168.20.1/new.domain.com/" {} \;
有没有一个命令可以在OS X和Linux上都适用?
使用Homebrew可以在OS X上安装GNU sed,它是在Linux上安装的那个。
如果您不想安装替代sed,请参考这个链接:[stackoverflow.com/questions/5694228#comment85499736_22084103](https://stackoverflow.com/questions/5694228#comment85499736_22084103)
为什么这个回答得到了578个赞?会创建以".oldext-e"结尾的许多备份文件。
谢谢!我一直在尝试编写一个生成应用程序的脚本,并在过去几个小时里一直在搜索这个问题。