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.

Extrae una palabra entre corchetes y reemplázala en una oración.

Así que digamos que tengo esta frase:

It's {raining|snowing|cold} outside

Lo que quiero es extraer aleatoriamente una palabra entre los corchetes, lo cual hice con el comando awk -vRS="}" -vFS="|" '{print $2}' (aún estoy trabajando para extraerlas de forma aleatoria). El resultado suele ser la segunda palabra, en nuestro caso snowing.

El problema es que el resultado es solo snowing, y lo que realmente quiero es algo como It's snowing outside, así que ¿cómo puedo extraer cualquier palabra de los corchetes y reemplazarla solo con una palabra?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para extraer una palabra aleatoria de los corchetes y reemplazarla en la oración, puedes usar el siguiente comando:

    sentence="Está {lloviendo|nevando|frío} afuera"
    random_word=$(awk -vRS="}" -vFS="|" '{print $int(rand()*NF)+1}' <<< "${sentence##*{}") 
    # La variable random_word tendrá una palabra aleatoria de los corchetes
    echo "${sentence//\{/*\/$random_word\/\}*}"
    # Esto reemplazará el corchete y la palabra seleccionada con la palabra aleatoria
    

    Lo que esto hace es:
    – Establece la oración en una variable llamada sentence.
    – Usa el comando awk para extraer todas las palabras entre {} y almacenarlas en un arreglo $2. El comando int(rand()*NF)+1 genera un número aleatorio entre 1 y la longitud del arreglo.
    – Guarda la palabra seleccionada aleatoriamente en una variable llamada random_word.
    – Utiliza la expansión de parámetros de bash para extraer todo antes y después de los corchetes y la palabra seleccionada, y reemplazarlos con la palabra aleatoria. El // reemplaza todas las ocurrencias en la oración.

    Esto te dará un resultado similar a “Está nevando afuera”.

Comments are closed.