是否有一种调用sed
todo的就地编辑功能,而无需在Linux和Mac上运行备份?虽然OSX附带的BSDsed
似乎需要sed -i '' …
,但GNUsed
Linux发行版通常会将引号解释为空输入文件名(而不是备份扩展名),并且需要sed -i …
.
是否有任何命令行语法可以同时使用这两种风格,这样我就可以在两个系统上使用相同的脚本?
是否有一种调用sed
todo的就地编辑功能,而无需在Linux和Mac上运行备份?虽然OSX附带的BSDsed
似乎需要sed -i '' …
,但GNUsed
Linux发行版通常会将引号解释为空输入文件名(而不是备份扩展名),并且需要sed -i …
.
是否有任何命令行语法可以同时使用这两种风格,这样我就可以在两个系统上使用相同的脚本?
如果你真的想以"简单"的方式使用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
个文件.