sed就位标志,在Mac(BSD)和Linux上均可使用
||
是否可以调用“ 0”以进行就地编辑而不进行备份,而该备份在Linux和Mac上均有效? OS X附带的BSD
sed
似乎需要sed -i \'\' …
,而GNUsed
Linux发行版通常会随附将引号解释为空的输入文件名(而不是备份扩展名),而需要sed -i …
。
是否有任何两种语法都适用的命令行语法,所以我可以在两个系统上使用相同的脚本?
没有找到相关结果
已邀请:
13 个回复
土投
注意缺少空间和点。 证明:
显然,您可以删除
文件。
到街客核
这适用于OS X,但不适用于GNU sed:
在OS X上,您 不能使用extension12ѭ,因为备份文件的扩展名将设置为
出于相同的原因,不能使用
,它需要在
和
之间留一个空格。
喷乡顾沥沪
然后,您的BSD sed将被GNU sed代替。 或者,您可以不使用默认名称进行安装,但是可以: 在安装
之后,按照说明更改
。 请检查脚本,以根据系统在
或
之间进行选择
号拳藐孔妇
在几乎所有情况下,这似乎都是比脚本,别名或其他替代方法更好的解决方案,用于解决GNU / Linux与BSD / Mac之间的ѭ5根本不兼容的问题。
梦话快家腹
这对两个都有效
校勒魏寡
在目录中出现“随机”的原因时找到了这个答案。) 显然没有办法让ѭ5在MacOS和Linuces上都能正常工作。 对于我来说,我的建议不是用with0ѭ(具有复杂的故障模式)就地更新,而是生成新文件并随后重命名它们。换句话说:避免
。
犯痪桂涛杭
选项不属于POSIX Sed。一种更便携的方法是 在Ex模式下使用Vim:
选择所有行
更换
保存并关闭
细屠截殴些
参数,比使用
更干净:
这不会创建备份文件,也不会创建带有引号的文件。
信藉乒
和 sed OSX手册页
我通过在bash \'if \'中使用别名\'d命令和\'uname \'的操作系统名称输出来解决此问题。解释引号时,尝试将依赖于操作系统的命令字符串存储在变量中时会遇到麻烦。为了扩展/使用脚本中定义的别名,必须使用\'shopt -s expand_aliases \'。 shopt的用法在这里处理。
钾涎净介
蓟类
脚本中就地执行
,并且不希望就地产生.bkp文件,那么您可以通过一种方法检测os(例如,使用ostype.sh),-那么下面的内置
的
外壳的hack应该可以工作:
雄鞋谋塘
翱抹村
例如用于包含
的文件
在Linux和Mac上均产生
。请注意,有一个带引号的字符串包含一个空格,在
和字符串之间没有空格。单引号或双引号都可以。 在Linux上,我在Ubuntu 14.04.4下使用
版本4.3.11,在OS X 10.11.4 El Capitan(Darwin 15.4.0)下在Mac版本3.2.57上使用。