perl - logo - ¿Cómo repito un carácter n veces en una cadena?
perl vs python (3)
Por defecto, las sustituciones toman una cadena como la parte para sustituir. Para ejecutar el código en el proceso de sustitución, debe utilizar el indicador e
.
$numOfChar = 10;
s/^(.*)/'' '' x $numOfChar . $1/e;
Esto agregará $numOfChar
espacio al inicio de su texto. Para hacerlo para cada línea en el texto, use la -p
(para un procesamiento rápido de una línea):
cat foo.txt | perl -p -e "$n = 10; s/^(.*)/'' '' x $n . $1/e/" > bar.txt
o si es parte de un script más grande, use las banderas -g
y -m
( -g
para global, es decir, sustitución repetida y -m
para hacer que ^
coincida al comienzo de cada línea):
$n = 10;
$text =~ s/^(.*)/'' '' x $n . $1/mge;
Estoy aprendiendo Perl, así que tenga paciencia conmigo para esta pregunta de noob.
¿Cómo repito un carácter n veces en una cadena?
Quiero hacer algo como a continuación:
$numOfChar = 10;
s/^/s*(.*)/'' '' x $numOfChar$1/;
Tienes razón. El operador x
de Perl repite una cadena varias veces.
print "test/n" x 10; # prints 10 lines of "test"
EDITAR: Para hacer esto dentro de una expresión regular, probablemente sería mejor (también conocido como el más amigable con el mantenimiento) asignar el valor a otra variable.
my $spaces = " " x 10;
s/^/s*(.*)/$spaces$1/;
Hay maneras de hacerlo sin una variable adicional, pero es solo mi $ 0.02 que será más fácil de mantener si lo haces de esta manera.
EDITAR: He arreglado mi expresión regular. Lo siento, no lo leí bien la primera vez.
Tu expresión regular se puede escribir como:
$numOfChar = 10;
s/^(.*)/('' '' x $numOfChar).$1/e;
pero - puedes hacerlo con:
s/^/'' '' x $numOfChar/e;
O sin usar expresiones regulares en absoluto:
$_ = ( '' '' x $numOfChar ) . $_;