es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Expresión Regular para encontrar la última línea de una tarjeta de trabajo JCL o toda la tarjeta.

Si alguno de ustedes está familiarizado con JCL en mainframe.
Estoy tratando de encontrar la última línea de la tarjeta de trabajo.

Básicamente, la primera línea que comienza con // y termina sin una coma.
En el ejemplo, necesito que se encuentre la tercera línea o hasta la tercera línea.

Estoy usando lineinfile de Ansible para insertar dinámicamente una tarjeta de ruta después de la tarjeta de trabajo.

Por ejemplo:

//SPOOL1   JOB (UU999999999,1103),'Programmer',CLASS=0, <--- comienzo de la tarjeta de trabajo
//         REGION=0M,MSGCLASS=R,TIME=5, LINES=(999999,WARNING),
//         NOTIFY=&SYSUID  <--- fin de la tarjeta de trabajo
//STEPNAME EXEC PGM=BPXBATCH 
//STDERR   DD   SYSOUT=*
//STDOUT   DD   SYSOUT=*
//STDPARM  DD   *
SH cat /dev/urandom

Hasta ahora tengo esto, que encuentra el comienzo de // y cualquier cosa después, pero no puedo resolver la última parte:

^(\Q//\E(.)*)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para coincidir con la última línea de la tarjeta de trabajo en Mainframe JCL, puedes utilizar el siguiente patrón regex:

    ^//[^,]*$
    

    Este patrón coincide con las líneas que comienzan con // y terminan sin una coma. Los anclajes ^ y $ aseguran que toda la línea sea coincidente. La parte [^,]* coincide con cualquier carácter excepto comas.

    Puedes utilizar este patrón con el módulo lineinfile de Ansible de la siguiente manera:

    - name: Insertar la tarjeta ROUTE después de la tarjeta de trabajo
      lineinfile:
        path: /ruta/al/archivo/jcl
        line: //ROUTE    DD  ...
        insertafter: '^//[^,]*$'
    

    Esto insertará la tarjeta //ROUTE después de la última línea de la tarjeta de trabajo. Ten en cuenta que el parámetro insertafter recibe un patrón regex para especificar la línea después de la cual se debe insertar la nueva línea.

Comments are closed.