Come ottenere + metacarattere per sed nel terminale?

2

Sembra che sed con Mac OS 1.7.4 sia quella originale, senza il metacharacter + . Posso ottenere la funzionalità di metacharacter + ?

    
posta ipavlic 19.07.2012 - 21:55
fonte

2 risposte

1

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]+

    
risposta data 19.07.2012 - 23:18
fonte
2

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]/'
    
risposta data 20.07.2012 - 02:10
fonte

Leggi altre domande sui tag