Es de todos modos que usted puede hacer regex partido de grupo usando sed como java patrón regex/partido/grupo?

si he cadena como

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

¿cómo puedo usar sed sólo para obtener el resultado como:

test-artifact-0.1-SNASHOT.jar

Me pregunto ¿sed le permiten hacer algo como java regex, se define el modelo como:

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

y, a continuación, usted puede obtener los resultados como una matriz como:

test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
InformationsquelleAutor Shengjie | 2012-07-25

4 Comentarios

  1. 59

    Tienes que escapar de paréntesis para agrupar expresiones:

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

    Y el uso de ellos con \1, \2, etc.


    EDITAR: También se nota justo antes de SNAPSHOT que [.] no coinciden. Dentro de corchetes . es literal. Debe ser [0-9.-]*

    • Con GNU sed usted puede evitar todos los escaparon paréntesis mediante el uso de expresiones regulares extendidas. El uso de la -r interruptor para ello.
    • -E también funciona en GNU no es necesario escapar de paréntesis.
  2. 16

    Esto es lo que Birei y Thor decir:

    sed -r "s/([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)(.*)/\n\n\n/"

    De salida:

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

    de hecho, para aquellos de cadena normal, awk podría salvar de la agrupación. 🙂

    que acaba de dar el parte número de índice que desee:

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

    de 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
  4. 2

    Si usted está buscando una manera más fácil, supongo que esto pueda ser de su ayuda! 🙂

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

    «-» se utiliza como delimitador
    y los campos de 1,2,5,6 se imprimen.

    Nota: Esto requiere conocer la posición exacta del campo.

Dejar respuesta

Please enter your comment!
Please enter your name here