如何在替换中使用的字符串中重复字符n次?我想做的事情如下:
$numOfChar = 10; s/^\s*(.*)/' ' x $numOfChar$1/;
envsm3lx1#
默认情况下,替换会将一个字符串作为要替换的部分。要在替换过程中执行代码,必须使用e标志。
e
$numOfChar = 10; s/^(.*)/' ' x $numOfChar . $1/e;
这将在文本的开头添加$numOfChar空间。要对文本中的每一行执行此操作,请使用-p标志(用于快速的单行处理):
$numOfChar
-p
cat foo.txt | perl -p -e "$n = 10; s/^(.*)/' ' x $n . $1/e/" > bar.txt
或者如果它是一个较大的脚本的一部分,使用-g和-m标志(-g用于全局,即重复替换,-m用于使^在每行的开头匹配):
-g
-m
^
$n = 10; $text =~ s/^(.*)/' ' x $n . $1/mge;
eivnm1vs2#
正则表达式可以写成:
$numOfChar = 10; s/^(.*)/(' ' x $numOfChar).$1/e;
但是-你可以这样做:
s/^/' ' x $numOfChar/e;
或者根本不使用regexp:
$_ = ( ' ' x $numOfChar ) . $_;
yr9zkbsy3#
你是对的,Perl的x运算符会多次重复一个字符串。
x
print "test\n" x 10; # prints 10 lines of "test"
要在正则表达式中实现这一点,最好(也就是大多数维护人员友好的)将值分配给另一个变量。
my $spaces = " " x 10; s/^\s*(.*)/$spaces$1/;
有很多方法可以在不使用额外变量的情况下实现它,但如果这样做,它只是我的0.02美元,那么维护起来会更容易。
3条答案
按热度按时间envsm3lx1#
默认情况下,替换会将一个字符串作为要替换的部分。要在替换过程中执行代码,必须使用
e
标志。这将在文本的开头添加
$numOfChar
空间。要对文本中的每一行执行此操作,请使用-p
标志(用于快速的单行处理):或者如果它是一个较大的脚本的一部分,使用
-g
和-m
标志(-g
用于全局,即重复替换,-m
用于使^
在每行的开头匹配):eivnm1vs2#
正则表达式可以写成:
但是-你可以这样做:
或者根本不使用regexp:
yr9zkbsy3#
你是对的,Perl的
x
运算符会多次重复一个字符串。要在正则表达式中实现这一点,最好(也就是大多数维护人员友好的)将值分配给另一个变量。
有很多方法可以在不使用额外变量的情况下实现它,但如果这样做,它只是我的0.02美元,那么维护起来会更容易。