如何使用perl基于正则表达式从数组中移出顶部元素?这些也是datarecords,这意味着我将输入记录分隔符($ /)设置为
$ / = '#';
例如,以下文本文件包含此数据记录。
#dddddddddd
ccccccccccc
eeeeeeeeeee
fffffffffff
我想删除#符号并保留文字,例如:
dddddddddd
ccccccccccc
eeeeeeeeeee
fffffffffff
答案 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/^\#//;