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?


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 .


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: \+.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.