Come abbinare le cifre seguite da un punto usando sed?


77

Sto cercando di usare sedper sostituire tutti i motivi con cifre seguite immediatamente da un punto (come 3., 355.) da una stringa vuota. Quindi provo:

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

Ma non funziona Perché?


1
Ho trovato questo articolo molto utile
Stphane

Risposte:


112

Perché sed non è perl - le regex sed non hanno una \dscorciatoia:

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

sed documentazione di espressione regolare qui .


3
Questo se vuoi zero o più cifre. /[[:digit:]]*\. /corrisponderà alla stringa foo.perché consenti zero cifre. Se vuoi uno o più usi \+come mostrato
glenn jackman

71

Due problemi:

  1. sednon supporta \d. Usa [0-9]o [[:digit:]].

  2. +deve essere backslash per ottenere il significato speciale: \+.


6
invece di retrocedere + (che non funziona su Mac OS X, ad esempio) puoi usare l'opzione -E su interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).Purtroppo, questo non aiuta con il problema \ d ...
gMale

4
@gmale: -Enon funziona con GNU sed, -rinvece lo usa .
Choroba,

12
Va bene ... sembra sedproprio che faccia schifo quando si tratta di portabilità ...
iconoclast

@choroba Penso di essermi confuso oggi. Ho intenzione di eliminare i miei commenti rumorosi ...
Steven Lu,

Fondamentalmente, quello che stavo cercando di mettere in guardia la gente è: se non usi regex esteso ( -Esu BSD sed e -rsu GNU sed), in BSD sed, +né lo \+stesso ( né lo stesso ?) funzionerà affatto, mentre in GNU sed puoi farli lavorare con la barra rovesciata. Da qui la raccomandazione comune di usare regex esteso negli script
Steven Lu,

3

La pagina man di sed fa riferimento alla pagina man re_format. Fa 2 distinzioni: (1) obsolete rispetto alle espressioni regolari estese; (2) espressioni regolari non migliorate rispetto a quelle avanzate. Sono possibili tutte e 4 le combinazioni. C'è supporto in sed sia per obsoleti che estesi, ma in entrambi i casi solo per non potenziati. L'operatore \ d è una caratteristica delle espressioni regolari migliorate, quindi non supportato da sed.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.