2011-05-18 14 views
5

Ottenere queste stringhe:regex e sed di Java non sono gli stessi ...?

00543515703528 
00582124628575 
0034911320020 
0034911320020 
005217721320739 
0902345623 
067913187056 
00543515703528 

applicare questa exp in Java: ^(06700|067|00)([0-9]*).

La mia intenzione è quella di rimuovere l'iniziale "06700, 067 e 00" dall'inizio della stringa.

E 'tutto fresco in java, gruppo 2 hanno sempre il numero intendo, ma in sed si mangia lo stesso:

$ cat strings|sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g' 
00543515703528 
00582124628575 
0034911320020 
0034911320020 
005217721320739 
0902345623 
067913187056 
00543515703528 

Che diamine mi manca?

Cheers,

f.

risposta

5

Quando si utilizzano le espressioni regolari estese, è inoltre necessario omettere il \ prima ( e ). Questo funziona per me:

sed -r 's/^(06700|067|00)([0-9]*)/\2/g' strings 

nota, inoltre, che non c'è alcun bisogno di una chiamata separata per cat

3

Credo che il vostro problema è questo:

default sed a BRE: Le impostazioni predefinite comportamento di sed è quello di sostenere base espressioni regolari (BRE). Per utilizzare tutte le funzionalità descritte in questa pagina impostare il -r (Linux) o -E bandiera (BSD) per uso prolungato espressioni regolari

Source

Senza questo flag, il | il personaggio è interpretato letteralmente. Prova questo esempio:

echo "06700|067|0055555" | sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g' 
Problemi correlati