В любом случае
sed "0,/^local/{s/md5/trust/}"
является специфическим GNU (адрес 0
и отсутствующий ;
до }
) и не будет работать с любой другой реализацией sed
(и Solaris не поставляется с GNU sed
по умолчанию).
Portable/standardly:
sed '/^local/,$!s/md5/trust/'
для замены только на строках до (но не включая) первой, начинающейся с local
. Или:
awk 'NR == 1, /^local/ {gsub(/md5/,"trust")}; {print}'
(на Solaris вам может понадобиться команда -p awk
).
Если вам нужна замена в первой строке, которая совпадает с /^local/
:
awk '/^local/ && ! seen {gsub(/md5/, "trust"); seen = 1}; {print}'
Или:
sed -e '/^local/!b' -e 's/md5/trust/g;:1' -e 'n;b1'
Чтобы быть уверенным, что POSIX-совместимые утилиты есть и в Solaris, и в Linux (из POSIX-оболочки типа bash
или ksh
(или /usr/xpg4/bin/sh
на Solaris)), вы можете добавить:
PATH=$(command -p getconf PATH):$PATH
в верхнюю часть скрипта. Или добавить команду -p
перед каждой командой, для которой вы хотите получить POSIX-версию.
ironlake (не знаю о песчаном мосту) пострадал из-за неправильной обработки в mesa, эта проблема, кажется, исправлена в более новых версиях (она была исправлена в августе 2015 года)
см. https: // ошибки .freedesktop.org / show_bug.cgi? id = 91254