匹配Perl中的多行缩进

时间:2017-09-27 20:40:43

标签: regex perl

我正在尝试使用以下代码计算每行的缩进空格数:

my $line = do {
    local $/;
    <>
};

if ( $line =~ /\n(\s+)/g ) {
    my $count = length($1);
    say "amount of spaces are $count";
}

输入文件包含以下文字:

#!/usr/bin/python3
  import sys
    x = 1
      testing

但我的程序只显示第一行的空格数

amount of spaces are 2

我希望它也返回

amount of spaces are 4
amount of spaces are 6

任何想法我能做什么?

2 个答案:

答案 0 :(得分:2)

您使用的是if而不是while

一个简单的解决方法是切换到逐行处理:

while (<>) {
    my ($leading_spaces) = /^(\s*)/;
    my $count = length $leading_spaces;
    say "amount of spaces are $count";
}

答案 1 :(得分:0)

你仍然可以将整个文件篡改为$ line然后(破坏性地):

sed -i 's/verify=platform_default/verify=disable/' /etc/python/cert-verification.cfg

注意我不认为你想使用\ s,因为它包含\ n,它会在几个连续的空行上给你一个匹配。我使用tab \ t和文字空间来匹配。如果您已经在扩展标签,那么当然可以删除它。