Подтвердить что ты не робот

Как я повторяю символ n раз в строке?

Я изучаю Perl, поэтому, пожалуйста, несите меня за этот вопрос noob.

Как я повторяю символ n раз в строке?

Я хочу сделать что-то вроде ниже:

$numOfChar = 10;

s/^\s*(.*)/' ' x $numOfChar$1/;
4b9b3361

Ответ 1

По умолчанию подстановки берут строку как часть для замены. Чтобы выполнить код в процессе подстановки, вы должны использовать флаг e.

$numOfChar = 10;

s/^(.*)/' ' x $numOfChar . $1/e;

Это добавит пробел $numOfChar к началу вашего текста. Чтобы сделать это для каждой строки текста, используйте флаг -p (для быстрой однострочной обработки):

cat foo.txt | perl -p -e "$n = 10; s/^(.*)/' ' x $n . $1/e/" > bar.txt

или если он является частью более крупного script, используйте флаги -g и -m (-g для глобальных, то есть повторная подстановка и -m, чтобы сделать ^ совпадением в начале каждой строки ):

$n = 10;
$text =~ s/^(.*)/' ' x $n . $1/mge;

Ответ 2

Ваше регулярное выражение может быть записано как:

$numOfChar = 10;

s/^(.*)/(' ' x $numOfChar).$1/e;

но - вы можете сделать это с помощью

s/^/' ' x $numOfChar/e;

Или без использования регулярных выражений вообще:

$_ = ( ' ' x $numOfChar ) . $_;

Ответ 3

Ты прав. Оператор Perl x повторяет строку несколько раз.

print "test\n" x 10; # prints 10 lines of "test"

РЕДАКТИРОВАТЬ: Чтобы сделать это в регулярном выражении, было бы лучше всего (a.k.a. большинство поддерживающих сторонников) просто присвоить значение другой переменной.

my $spaces = " " x 10;
s/^\s*(.*)/$spaces$1/;

Есть способы сделать это без дополнительной переменной, но это всего лишь мои 0,02 доллара, что будет легче поддерживать, если вы сделаете это таким образом.

EDIT: я исправил свое регулярное выражение. Извините, я не читал его в первый раз.