如何使这个 SED 命令更具可移植性?

如何使这个 SED 命令更具可移植性?

我正在使用以下sed命令:

cat version | sed -e 's/[0-9][0-9][0-9][0-9][0-9:M]*-[abp]/Ver\n/'

其规范化如下:

4330M-p  ->  Ver<newline>

这在 GNU SED 中运行良好,但在 Mac OS X 上的 BSD SED 中, \n 会变成n这样:

4330M-p  ->  Vern

将包含随时间变化的版本号的一些输出标准化为静态字符串,后跟换行符。这用作测试的一部分,其中sed处理后的输出通过已知的黄金文件进行比较diff,我们不希望由于版本号变化而导致失败,并且进一步需要为我们的目的添加换行符。

我怎样才能用一个在 GNU 和 BSD 版本上都可以工作的方式替换一个添加换行符的字符串sed,或者我应该只在 Mac OS X 上安装 GNU,sed因为这无法完成?

答案1

您可以在脚本中创建一个文字换行符,如下所示:

cat version | sed -e 's/[0-9][0-9][0-9][0-9][0-9:M]*-[abp]/Ver\
/'

相关内容