Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

109
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda