Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

107
Vistas
Extraiga una palabra entre paréntesis y reemplácela en una oración

así que digamos que tengo esta oración

It's {raining|snowing|cold} outside

Lo que quiero es extraer aleatoriamente una palabra entre corchetes, lo que hice con awk -vRS="}" -vFS="|" '{print $2}' (sigue trabajando para extraerlos aleatoriamente). La salida suele ser la segunda palabra, en nuestro caso snowing .

La cuestión es que la salida solo está snowing , y la salida real que quiero es algo así como It's snowing outside , entonces, ¿cómo extraigo cualquier palabra de los paréntesis y la reemplazo con una sola palabra?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Dado que necesita reescribir una cadena encontrando y reemplazando una parte de ella, la expresión regular es adecuada

 use warnings; use strict; use feature 'say'; sub pick_one { my ($pattern) = @_; my @choices = split /\|/, $pattern; return $choices[int rand @choices]; } my $sentence = q(It's {raining|snowing|cold} outside); $sentence =~ s/\{ ( [^}]+ ) \}/pick_one($1)/ex; say $sentence;

Ese modificador /e hace que evalúe el lado de reemplazo como código, y el valor producido luego se usa como reemplazo. Así que ejecutamos un sub en el que ocurre la elección. Tener esto en un sub es una buena forma de refinamientos/cambios posteriores, implementados en el sub.

Un elemento de la matriz @choices se selecciona usando rand . Una expresión para su límite superior se evalúa en el contexto escalar, por lo que podemos usar directamente la matriz @choices , ya que luego se termina usando su longitud.

over 4 years ago · Santiago Trujillo Denunciar

0

echo "It's {raining|snowing|cold} outside" |\ perl -pe 's/\{(.*?)\}/(split("[|]",$1)[rand(3)]/e'

o para un número arbitrario de condiciones climáticas:

 echo "It's {raining|snowing|cold} outside" |\ perl -pe 's/\{(.*?)\}/@a=split("[|]",$1); $a[rand(@a)]/e'
over 4 years ago · Santiago Trujillo Denunciar

0

Usando cualquier awk en cualquier shell en cada caja de Unix:

 $ cat tst.awk BEGIN { srand() } match($0,/\{[^}]+}/) { wordList = substr($0,RSTART+1,RLENGTH-2) numWords = split(wordList,words,/[|]/) wordNr = int(rand() * numWords + 1) $0 = substr($0,1,RSTART-1) words[wordNr] substr($0,RSTART+RLENGTH) } { print }

 $ awk -f tst.awk file It's snowing outside $ awk -f tst.awk file It's cold outside

Consulte rand() (y srand() ) en https://www.gnu.org/software/gawk/manual/gawk.html#Numeric-Functions para obtener detalles sobre su aleatoriedad.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda