Com ksh
ou bash -O extglob
(ou depois de shopt -s extglob
em um script bash
) ou zsh -o kshglob
(ou depois de set -o kshglob
em um script zsh
):
VG_MY=${VG_MY//+(=)+([0-9])+(=)/}
O +(...)
é um glob estendido ksh semelhante ao operador regexp estendido +
. +(x)
corresponde a um ou mais x
s.
Portanto, o texto acima remove todas as seqüências de um ou mais =
s seguidas por um ou mais dígitos decimais seguidos por um ou mais =
s como sed -E 's/=+[0-9]+=+//g'
¹.
Não que seja possível remover 456==
dentro de ==123====456==
, pois a primeira substituição removeria ==123====
deixando algo que não corresponde ao padrão. Para poder removê-los, você pode alterá-lo para:
VG_MY=${VG_MY//+(=)[0-9]*([0-9=])=/}
(como sed -E 's/=+[0-9][0-9=]*=//g'
)
Com as próprias globs estendidas de zsh
( zsh -o extendedglob
): #
é o equivalente a ERE *
e ##
de ERE +
(e (#c1,3)
de {1,3}
). Então, você pode fazer isso:
set -o extendedglob
VG_MY=${VG_MY//=##[0-9]##=##/}
¹ Observe que, embora várias implementações de sed
suportem -E
para regexps estendidas, ela ainda não é padrão, e você pode ocasionalmente encontrar algumas implementações que não a suportam. Com esses, você pode ignorar -E
e usar \{1,\}
como substituto do BRE para +
(ou usar ==*
em vez de =+
).