Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

108
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!