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:

sed 's/\d+\.//g' file.txt

Mais ça ne marche pas. Pourquoi donc?

Mika H.
la source
1
J'ai trouvé cet article très utile
Stéphane

Réponses:

112

Parce que sed n'est pas perl - les expressions rationnelles sed n'ont pas de \draccourci:

sed 's/[[:digit:]]\+\.//g'

La documentation sur les expressions régulières est ici .

Glenn Jackman
la source
3
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:

  1. sedne supporte pas \d. Utilisez [0-9]ou [[:digit:]].

  2. +doit être backslashés pour obtenir la signification particulière: \+.

choroba
la source
6
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.

Jonathan Pool
la source