例如,我有一个包含
的文件foo.txt
abc
bcc
ccc
baa
我想返回“c \ nb”的所有实例的索引(在这种情况下,字符串是从文件的第三个和第十一个字符开始找到的)。实现这一目标的最简单方法是什么?
答案 0 :(得分:4)
如果您确定该文件足够小以适应内存,您可以将其篡改为变量并应用正则表达式:
$ perl -0777 -ne 'print $-[0], "\n" while /c\nb/g' foo.txt
否则:
$ perl -ne 'print $n - 2, "\n" if /^b/ && $last =~ /c$/; $last = $_; $n += length' foo.txt
请注意,这些解决方案取决于仅包含ASCII字符的输入文件。
答案 1 :(得分:3)
#!/usr/bin/perl
my $s = 'abc
bcc
ccc
baa';
while ($s =~ /c\nb/mg ) {
print pos($s), "\n"
}
这将输出5,13(pos
函数返回匹配结束的索引,但你应该可以补偿它。)
答案 2 :(得分:1)
我确信这是一个不错的正则表达式解决方案,但我会回到较早的index
函数:
$_ = q[abc
bcc
ccc
baa];
my $z; print $z++,"\n" while 0<=($z=index($_,"c\nb",$z));
<小时/>
2
10