Alpine Linux - sed - 使用 Alpine sed 实用程序时 -z 或 --null-data 开关的等效项是什么?

Alpine Linux - sed - What Is The Equivalent Of -z or --null-data Switch When Using Alpine sed Utility?

在之前的项目中,我使用 sed 实用程序用 NUL 字符替换换行符以与 API 兼容,以便在 CI 服务器上添加发行说明。

sed -zE 's/\r\n|\n/\n/g' < CHANGELOG.md

但是,在另一个项目中,我使用的是基于 alpine 的 docker 图像 (mcr.microsoft.com/dotnet/core/sdk:3.1-alpine),而 -z--null-data 图像在 alpine linux 使用 sed 实用程序时。

如何使用 Alpine Linux sed 实用程序实现 -z--null-data 的等价物?

What Is The Equivalent Of -z or --null-data Switch When Using Alpine sed Utility?

没有等价物。

How do I achieve the equivalent of the -z or --null-data with Alpine Linux sed utility?

安装 GNU sed,而不是使用 busybox sed。

/ # sed --help
BusyBox v1.31.1 () multi-call binary.
/ # apk add sed
...
/ # sed --version
sed (GNU sed) 4.8

I used the sed utility to replace newlines with NUL

使用tr,这是一个“翻译或删除字符”的工具。

tr '\n' '[=11=]'
sed -zE 's/\r\n|\n/\n/g'

如果要远程\r,则无需使用零分隔流。只需从实际的行尾删除 \r 字符,如果 sed 已经在行上工作,为什么要匹配换行符。

sed 's/\r$//'

但实际上,要再次删除字符,请使用 tr:

tr -d '\r'