with regular pattern expressions examples regex linux sed

regex - pattern - sed regular expression linux



sed-cómo hacer grupos regex usando sed (4)

Esto es lo que Birei y Thor quieren decir:

sed -r "s/([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)(.*)//1/n/2/n/3/n/4/"

Salida:

test-artifact- 201251- balbal- 0.1-SNAPSHOT.jar

¿Hay alguna forma de que puedas hacer un grupo de correspondencias regex usando sed como patrón / partido / grupo de expresiones regulares de Java?

si tengo una cuerda como

test-artifact-201251-balbal-0.1-SNAPSHOT.jar

¿Cómo uso sed solo para obtener el resultado como:

test-artifact-0.1-SNASHOT.jar

Me pregunto si sed te permite hacer algo como java regex, tú defines el patrón como:

([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)([.]*SNAPSHOT.jar)

y luego puedes obtener los resultados como una matriz como:

test-artifact- 201251- balbal- 0.1-SNAPSHOT.jar


Si estás buscando una forma más fácil, ¡supongo que esto podría ser de tu ayuda! :)

echo "est-artifact-201251-balbal-0.1-SNAPSHOT.jar" | cut -d- -f1,2,5,6

"-" usado como delímetro y los campos 1,2,5,6 se imprimen.

Nota: Esto requeriría que conozca la posición exacta del campo.


Tienes que escapar paréntesis para agrupar expresiones:

/([a-z]*-[a-z]*-/)/([0-9]*-/)/([a-z]*-/)/([.]*SNAPSHOT.jar/)

Y úselos con /1 , /2 , etc.

EDITAR : También tenga en cuenta justo antes de SNAPSHOT que [.] No coincidirá. Entre corchetes . es literal Debería ser [0-9.-]*


de hecho, para esas cadenas regulares, awk podría salvarlo de la agrupación. :)

solo da el número de índice de la pieza que deseas:

awk ''BEGIN{FS=OFS="-"}{print $1,$2,$5,$6}''

salida:

kent$ echo "test-artifact-201251-balbal-0.1-SNAPSHOT.jar"|awk ''BEGIN{FS="-";OFS="-"}{print $1,$2,$5,$6}'' test-artifact-0.1-SNAPSHOT.jar