如何使用perl基于正则表达式进行移位?

时间:2011-08-02 14:20:06

标签: perl

如何使用perl基于正则表达式从数组中移出顶部元素?这些也是datarecords,这意味着我将输入记录分隔符($ /)设置为

$ / = '#';

例如,以下文本文件包含此数据记录。

    #dddddddddd
    ccccccccccc
    eeeeeeeeeee
    fffffffffff

我想删除#符号并保留文字,例如:

    dddddddddd
    ccccccccccc
    eeeeeeeeeee
    fffffffffff

3 个答案:

答案 0 :(得分:2)

不要将shift与正则表达式替换混淆。

shift将删除数组中的第一个元素,而不是字符串。

正则表达式替换可以处理删除前导'#' sigil。

数组的第一个元素是$array[0]

如果对此第一个元素应用了正则表达式替换,则会删除'#'


my @array = ( '#dddddddddd', 'ccccccccccc', 'eeeeeeeeeee', 'fffffffffff' );

$array[0] =~ s/^#//;

print $array[0];  # 'dddddddddd'

答案 1 :(得分:2)

如果你只是想操纵一个文本文件,那么单行代码似乎是最好的解决方案。这将编辑文件并在“inputfile.txt.bak”中保留备份。

perl -pi.bak -we 's/^#//' inputfile.txt

或者你可以进行shell重定向:

perl -wpe 's/^#//' inputfile.txt > outputfile.txt

这些将尝试更改文件中的所有行。如果你只想改变第一行,你需要一些不同的东西:

perl -wpe 's/^#// if ($. == 0);' inputfile.txt > outputfile.txt

答案 2 :(得分:0)

这似乎与数组无关。看起来你只是处理字符串。

这将删除字符串$line的前导哈希标记:

$line =~ s/^\#//;