Comment faire correspondre les chiffres suivis d'un point à l'aide de sed?
77
J'essaie d'utiliser sedpour substituer à tous les motifs des chiffres suivis immédiatement d'un point (tel que 3., 355.) par une chaîne vide. Alors j'essaye:
C'est si vous voulez zéro ou plusieurs chiffres. /[[:digit:]]*\. /correspondra à la chaîne foo.parce que vous autorisez zéro chiffre. Si vous voulez une ou plusieurs utilisations \+comme indiqué
glenn jackman
71
Deux problèmes:
sedne supporte pas \d. Utilisez [0-9]ou [[:digit:]].
+doit être backslashés pour obtenir la signification particulière: \+.
au lieu d'inverser le + (ce qui ne fonctionne pas sous Mac OS X, par exemple), vous pouvez utiliser l'option -E pour interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).Malheureusement, cela n'aide pas le problème de \ d ...
gMale
4
@gmale: -Ene fonctionne pas pour GNU sed, il utilise à la -rplace.
Choroba
12
D'accord ... ça ressemble vraiment à de la sedmerde quand il s'agit de la portabilité ...
iconoclast
@ Choroba Je pense que je me suis confondu aujourd'hui. Je vais supprimer mes commentaires bruyants ...
Steven Lu
Ce que j’essayais d’avertir les gens, c’est essentiellement: si vous n’utilisez pas de regex étendu ( -Esur BSD sed et -rGNU sed), sous BSD sed, ni +ne fonctionnera \+(même avec ?), alors que dans GNU sed, vous pouvez faites-les travailler avec la barre oblique inverse. D'où la recommandation commune d'utiliser l'expression régulière étendue dans les scripts
Steven Lu
3
La page de manuel sed fait référence à la page de manuel re_format. Il fait 2 distinctions: (1) expressions régulières obsolètes par rapport aux expressions régulières étendues; (2) expressions régulières non améliorées par rapport aux expressions régulières améliorées. Les 4 combinaisons sont possibles. Sed est obsolète et étendu, mais dans les deux cas uniquement pour les versions non améliorées. L'opérateur \ d est une fonctionnalité d'expressions régulières améliorée, donc non prise en charge par sed.
Réponses:
Parce que sed n'est pas perl - les expressions rationnelles sed n'ont pas de
\d
raccourci:La documentation sur les expressions régulières est ici .
la source
/[[:digit:]]*\. /
correspondra à la chaînefoo.
parce que vous autorisez zéro chiffre. Si vous voulez une ou plusieurs utilisations\+
comme indiquéDeux problèmes:
sed
ne supporte pas\d
. Utilisez[0-9]
ou[[:digit:]]
.+
doit être backslashés pour obtenir la signification particulière:\+
.la source
interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).
Malheureusement, cela n'aide pas le problème de \ d ...-E
ne fonctionne pas pour GNU sed, il utilise à la-r
place.sed
merde quand il s'agit de la portabilité ...-E
sur BSD sed et-r
GNU sed), sous BSD sed, ni+
ne fonctionnera\+
(même avec?
), alors que dans GNU sed, vous pouvez faites-les travailler avec la barre oblique inverse. D'où la recommandation commune d'utiliser l'expression régulière étendue dans les scriptsLa page de manuel sed fait référence à la page de manuel re_format. Il fait 2 distinctions: (1) expressions régulières obsolètes par rapport aux expressions régulières étendues; (2) expressions régulières non améliorées par rapport aux expressions régulières améliorées. Les 4 combinaisons sont possibles. Sed est obsolète et étendu, mais dans les deux cas uniquement pour les versions non améliorées. L'opérateur \ d est une fonctionnalité d'expressions régulières améliorée, donc non prise en charge par sed.
la source