2011-05-18 19 views
5

Obtener estas cadenas:Java regex y sed no son lo mismo ...?

00543515703528 
00582124628575 
0034911320020 
0034911320020 
005217721320739 
0902345623 
067913187056 
00543515703528 

Aplicar esta exp en Java: ^(06700|067|00)([0-9]*).

Mi intención es eliminar el "06700, 067 y 00" desde el comienzo de la cadena.

Todo es fresco en java, grupo 2 siempre tienen el número pretendo, pero en sed que no es el mismo:

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

¿Qué diablos me estoy perdiendo?

Cheers,

f.

Respuesta

5

Al usar expresiones regulares extendidas, también es necesario omitir la \ antes ( y ). Esto funciona para mí:

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

nota también que no hay necesidad de una llamada independiente a cat

3

Creo que su problema es el siguiente:

defecto de sed a BRE: El defecto comportamiento de sed es apoyar expresiones regulares sencillas (BRE). Para utilizar todas las las características descritas en esta página establecer la -r (Linux) o -E bandera (BSD) a uso extendido de expresiones regulares

Source

Sin este indicador, el | el personaje se interpreta literalmente Prueba este ejemplo:

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