猿问

sed命令-i选项在mac上失败,但在linux上工作。

sed命令-i选项在mac上失败,但在linux上工作。

我已经成功地使用了以下sed命令来搜索/替换Linux中的文本:

sed -i 's/old_link/new_link/g' *

然而,当我在我的MacOSX上试用它时,我得到:

“命令c期望\后面跟着文本”

我以为我的Mac会运行一个普通的Bash外壳。出什么事啦?

编辑:

根据@HighPerformance,这要归功于Macsed因此,我的问题是如何在bsd中复制此命令。sed?

编辑:

下面是一个实际的示例,其原因是:

sed -i 's/hello/gbye/g' *


胡子哥哥
浏览 1004回答 3
3回答

开满天机

如果您使用-i选项,您需要为备份提供扩展。如果你有:File1.txtFile2.cfg命令(注意,在-i和''而-e使其在Mac的新版本和GNU上工作):sed -i'.original' -e 's/old_link/new_link/g' *创建2个备份文件,如:File1.txt.originalFile2.cfg.original没有可移植的方法来避免生成备份文件,因为不可能找到对所有情况都有效的sed命令组合:sed -i -e ...-无法在OSX上工作,因为它创建了-e备份sed -i'' -e ...-在OSX 10.6上不工作,但在10.9+上工作sed -i '' -e ...-不从事GNU工作注考虑到没有sed命令在所有平台上工作,您可以尝试使用另一个命令来实现相同的结果。例如,perl -i -pe's/old_link/new_link/g' *

牛魔王的故事

我相信在OSX上使用-i备份文件的扩展名是所需..试着:sed -i .bak 's/hello/gbye/g' *使用GNUsed扩展是任选.

莫回无

这适用于sed的GNU和BSD版本:sed -i'' -e 's/old_link/new_link/g' *或者有后援:sed -i'.bak' -e 's/old_link/new_link/g' *注意后面缺少的空格-i选择!(GNU sed必需)
随时随地看视频慕课网APP
我要回答