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