猿问

在mac(Bsd)和linux上工作的sed就地标记。

在mac(Bsd)和linux上工作的sed就地标记。

是否有调用sed没有备份的TODO就地编辑工作在linux和mac上?而BSDsed随OSX发货似乎需要sed -i '' …,GNUsedLinux发行版通常会将引号解释为空输入文件名(而不是备份扩展名),并且需要sed -i …相反。

是否有适用于这两种类型的命令行语法,所以我可以在两个系统上使用相同的脚本?


慕桂英546537
浏览 460回答 3
3回答

慕姐8265434

如果你真的想用sed -i使用“轻松”的方式,下面的方法在GNU和BSD/Mac上都是有效的sed:sed -i.bak 's/foo/bar/' filename注意缺少空间和点。证明:# GNU sed % sed --version | head -1 GNU sed version 4.2.1 % echo 'foo' > file % sed -i.bak 's/foo/bar/' ./file % ls file  file.bak % cat ./file bar # BSD sed % sed --version 2>&1 | head -1 sed: illegal option -- - % echo 'foo' > file % sed -i.bak 's/foo/bar/' ./file % ls file  file.bak % cat ./file bar显然,您可以直接删除.bak档案。

MYYA

在OSX上,我总是通过Homebrelet安装GNUsed版本,以避免脚本中的问题,因为大多数脚本都是为GNUsed版本编写的。brew install gnu-sed --with-default-names然后,您的BSDsed将被GNUsed所取代。或者,您可以在没有默认名称的情况下安装,但随后:安装gnu-sed后按指示更改路径。根据系统的不同,签入要在gsed或sed之间选择的脚本。
随时随地看视频慕课网APP
我要回答