【发布时间】:2018-07-20 14:38:30
【问题描述】:
在 Linux 上,我有一个使用 sed 的 bash 脚本。在此脚本中,我使用“sed -i”进行替换。
很遗憾,在 MacOS 上,这个版本的 sed 与 Linux sed 不同。
我正在寻找一种在 Linux 和 MacOS 上使用兼容 sed 的方法,即为两个操作系统使用相同的脚本。
您能否告诉我是否在两个操作系统中使用gsed 而不是sed 允许为此脚本拥有一个唯一的兼容版本(其中gsed -i 在两者上都适用)
更新 1:
就我而言,在 MacOS 10.9.5 上,我想将文件的 line 2 替换为变量的值。我试过了:
a=2
sed -i'' -e "2c\$a" file.dat
但该行替换为"$a" 而不是a=2 的值。
有什么想法吗?
ps:我想要一个 Linux/MacOS 便携式命令行。
【问题讨论】:
-
你能不能不使用
-i标志并在你的sed 之后做一个mv -f your_sed_output your_original_file?那么您就不必胡乱安装和祈祷了。 -
您可以使用
sed -i.bak '....',它在 Lunux 和 MacOS 上都可以正常工作 -
gsed在 BSD(Darwin、MacOS)或 Solaris 上代表 GNU sed,与大多数 Linux 发行版附带的sed相同。不幸的是,我不认为(所有)Linux 发行版也会有 g 前缀名称(我的没有)(顺便说一句。同样的故事awk、tar和其他)。 -
Perl可以做所有sed可以做的事情,甚至更多,而且在平台之间更加正交和一致,包括 Solaris。 -
sed -e "2s|.*|$a|" file.dat怎么样