Alpine Linux - sed - Что эквивалентно ключу -z или --null-data при использовании утилиты Alpine sed?

В предыдущем проекте я использовал утилиту sed для замены символов новой строки символами NUL для совместимости с API для добавления примечания к выпуску на сервере CI.

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

Однако в другом проекте я использую образ докера на основе alpine (mcr.microsoft.com/dotnet/core/sdk:3.1-alpine), а образ -z или --null-data не распознается в alpine linux при использовании утилиты sed.

Как добиться эквивалента -z или --null-data с помощью утилиты Alpine Linux sed?


person anon_dcs3spp    schedule 22.11.2020    source источник
comment
Попробуйте сначала запустить apk add --update sed   -  person anubhava    schedule 22.11.2020


Ответы (1)


Что эквивалентно ключу -z или --null-data при использовании утилиты Alpine sed?

Нет эквивалента.

Как добиться эквивалента -z или --null-data с помощью утилиты Alpine Linux sed?

Вместо использования busybox sed установите GNU sed.

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

Я использовал утилиту sed для замены новых строк на NUL

Используйте tr, это инструмент, созданный для перевода или удаления символов.

tr '\n' '\0'
sed -zE 's/\r\n|\n/\\n/g'

Если вы хотите удаленно \r, нет необходимости использовать потоки, разделенные нулем. Просто удалите символ \r с фактического конца строки, зачем сопоставлять новую строку, если sed уже работает в строках.

sed 's/\r$//'

но на самом деле, опять же, для удаления символов используйте tr:

tr -d '\r'
person KamilCuk    schedule 22.11.2020