Sembra che sed con Mac OS 1.7.4 sia quella originale, senza il metacharacter +
. Posso ottenere la funzionalità di metacharacter +
?
La +
è una estensione GNU di sed
che corrisponde a uno o più dell'espressione precedente ma la versione su OS X è BSD sed
. Una versione di GNU sed
è stata portata su OS X su MacPorts . Altrimenti dovrai provare una soluzione alternativa.
Ad esempio, per abbinare uno o più numeri, potresti usare [0-9][0-9]*
invece di [0-9]+
L'implementazione di sed
di OS X utilizza per impostazione predefinita il formato di espressione regolare "base", che non supporta +
. Da man re_format
:
Obsolete (''basic'') regular expressions differ in several respects. '|'
is an ordinary character and there is no equivalent for its functional-
ity. '+' and '?' are ordinary characters, and their functionality can be
expressed using bounds ('{1,}' or '{0,1}' respectively). Also note that
'x+' in modern REs is equivalent to 'xx*'. The delimiters for bounds are
'\{' and '\}', with '{' and '}' by themselves ordinary characters. The
parentheses for nested subexpressions are '\(' and '\)', with '(' and ')'
by themselves ordinary characters. [...]
Quindi, cosa puoi fare? Bene, una possibilità è dire a sed
di usare il formato moderno con l'interruttore -E
. Ciò potrebbe, tuttavia, costringerti a riscrivere altre parti della tua RE per conformarle (ad esempio, scambiando \( ... \)
con ( ... )
). Un'altra opzione è quella di utilizzare uno dei moduli alternativi suggeriti sopra. Ecco alcuni esempi che utilizzano i vari approcci per abbinare "A" seguito da uno o più "B" o "C", seguito da "D":
sed -E 's/A[BC]+D/[match]/'
sed 's/A[BC]\{1,\}D/[match]/'
sed 's/A[BC][BC]*D/[match]/'