151 votes

Comment faire correspondre des chiffres suivis d'un point en utilisant sed ?

J'essaie d'utiliser sed pour substituer tous les motifs avec des chiffres suivis immédiatement d'un point (tels que 3. , 355. ) par une chaîne vide. J'essaie donc :

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

Mais ça ne marche pas. Pourquoi cela ?

1 votes

J'ai trouvé cet article très utile

205voto

Abbas Points 3737

Parce que sed n'est pas perl -- les regex sed n'ont pas d'avertissement. \d en abrégé :

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

documentation sur les expressions régulières sed aquí .

5 votes

C'est si vous voulez zéro ou plusieurs chiffres. /[[:digit:]]*\. / correspondra à la chaîne de caractères foo. parce que vous autorisez les chiffres zéro. Si vous voulez un ou plus utiliser \+ comme indiqué

4 votes

Pas très régulier alors, n'est-ce pas ?

114voto

choroba Points 17339

Deux problèmes :

  1. sed ne prend pas en charge \d . Utilisez [0-9] o [[:digit:]] .

  2. + doivent être antislashés pour obtenir la signification spéciale : \+ .

17 votes

Au lieu de mettre le + en antislash (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 avec la \d question...

7 votes

@gmale : -E ne fonctionne pas pour GNU sed, il utilise -r à la place.

22 votes

Ok... ça ressemble vraiment à sed est juste nul quand il s'agit de portabilité...

8voto

ti7 Points 177

Pour compléter les autres réponses, quelques années plus tard, j'ai découvert que je voulais la fonction étendue pour une expression rationnelle plus complexe.

Cela attend simplement + pour un ou plusieurs d'entre eux, et a généralement rendu la chaîne plus évidente pour moi, tant pour mon cas que pour celui-ci.

# NOTE \d is not supported
sed --regexp-extended 's/[0-9]+\.//g'

-E -r --regexp-extended sont toutes les mêmes

使用方法 sed 4.7

6voto

Jonathan Pool Points 161

La page de manuel sed fait référence à la page de manuel re_format. Elle fait 2 distinctions : (1) expressions régulières obsolètes contre expressions régulières étendues ; (2) expressions régulières non améliorées contre expressions régulières améliorées. Les 4 combinaisons sont possibles. Il existe un support dans sed pour les expressions régulières obsolètes et étendues, mais dans tous les cas seulement pour les expressions régulières non améliorées. Le site \d est une caractéristique des expressions régulières améliorées, et n'est donc pas prise en charge par sed.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X