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.

Extraiga todas las ocurrencias entre delimitadores, siendo que pueden aparecer más de uno por línea.

Tengo un archivo de documento file.yaml que tiene algo como marcadores de posición para reemplazar:

class: ##TOPIC##-area
  name: myClass
type: Class
secretKey: private-##SECRET_KEY##

Hasta ahora he utilizado grep para obtener los valores de los marcadores de posición:

grep -P '(?<=##).*(?=##)' file.yaml

Entonces, obtuve estos valores:

TOPIC
SECRET_KEY

Ahora, tenemos que introducir nuevas propiedades que pueden tener más de un marcador de posición por línea:

class: ##TOPIC##-area
  name: myClass
type: Class
secretKey: private-##SECRET_KEY##-encoded-##SUFFIX_CODE##

Por lo tanto, grep ya no funcionaba porque la salida se convirtió en:

TOPIC
SECRET_KEY##-encoded-##SUFFIX_CODE

Pero, quiero tener:

TOPIC
SECRET_KEY
SUFFIX_CODE

Acepto todo tipo de sugerencias e ideas para resolver eso. Gracias.

edit: La idea es simplemente obtener esos marcadores de posición, no reemplazarlos. Disculpa por el malentendido.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una solución puede ser utilizar awk en lugar de grep para extraer los valores de los marcadores de posición. Podemos configurar el separador de campos de awk como “##” y luego imprimir cada segundo campo comenzando desde el segundo campo. Esto nos dará todos los valores de los marcadores de posición.

    Aquí está el comando:

    awk -F'##' 'NR>1{for (i=2;i<=NF;i+=2) print $i}' archivo.yaml
    

    Explicación:

    • -F'##': establece el separador de campos como “##”
    • NR>1: comienza a procesar desde la segunda línea (ya que la primera línea no tiene marcadores de posición)
    • for (i=2;i<=NF;i+=2) print $i: para cada línea, recorre cada segundo campo (comenzando desde el segundo campo) e imprime su valor

    Este comando debería dar la salida deseada:

    TOPIC
    SECRET_KEY
    SUFFIX_CODE
    

Comments are closed.