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.
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:
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 valorEste comando debería dar la salida deseada: