我如何在这个问题中使用sed?(错误:“.csv”:无效的命令代码)

8 浏览
0 Comments

我如何在这个问题中使用sed?(错误:“.csv”:无效的命令代码)

我被迫为当前的客户使用CVS,并且远程存储库的地址发生了变化。我唯一找到的改变本地代码中远程地址的方法是进行递归搜索和替换。\n然而,使用sed命令时我本以为会起作用:\n

find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \;

\n但是每个文件都出现错误:\nsed: 1: \".//file/path ...\": invalid command code .\n\n我尝试过在sed的匹配/替换中转义句点,但没有解决任何问题。

0
0 Comments

在使用sed命令时出现错误:".csv": 无效的命令代码。这个错误的出现是因为忘记给-i选项添加参数。解决这个问题的方法是将-i更改为-i ''。当然,这意味着您不希望备份您的文件;否则,可以提供您选择的扩展名,比如-i .bak

0
0 Comments

问题的原因是在OS X系统上,内置的sed命令不够强大。解决方法是使用brew命令安装gnu-sed,然后使用gsed命令替代sed命令。这样就可以正常使用sed命令了。通过设置别名alias sed='gsed',可以完全对齐macOS和linux系统之间的差异。这个解决方法在Linux和Mac系统上都适用。

0
0 Comments

在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"结尾的许多备份文件。

谢谢!我一直在尝试编写一个生成应用程序的脚本,并在过去几个小时里一直在搜索这个问题。

0