Il semble que le sed livré avec Mac OS 1.7.4 est le sed original, sans le +
métacaractère. Puis-je obtenir le +
la fonctionnalité des métacaractères ?
Réponses
Trop de publicités?L'implémentation d'OS X de sed
utilise par défaut le format d'expression régulière "de base", qui ne prend pas en charge le format +
. De 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. [...]
Alors, que pouvez-vous faire ? Eh bien, une possibilité est de dire sed
pour utiliser le format moderne avec le -E
interrupteur. Toutefois, cela peut vous obliger à réécrire d'autres parties de votre RE pour vous y conformer (par exemple, en remplaçant \( ... \)
avec ( ... )
). Une autre option consiste à utiliser l'une des formes alternatives suggérées ci-dessus. Voici des exemples utilisant les différentes approches pour faire correspondre "A" suivi d'un ou plusieurs "B" ou "C", suivi de "D" :
sed -E 's/A[BC]+D/[match]/'
sed 's/A[BC]\{1,\}D/[match]/'
sed 's/A[BC][BC]*D/[match]/'
En +
est un Extension GNU de sed
qui correspond à une ou plusieurs des expressions précédentes mais la version sur OS X est BSD sed
. Une version de GNU sed
a été porté sur OS X sur MacPorts . O
Par exemple, pour faire correspondre un ou plusieurs chiffres, vous pouvez utiliser [0-9][0-9]*
au lieu de [0-9]+