2011-01-13 45 views

回答

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字符的輸入文件。

3
#!/usr/bin/perl 

my $s = 'abc 
bcc 
ccc 
baa'; 

while ($s =~ /c\nb/mg) { 
    print pos($s), "\n" 
} 

這將輸出5,13(pos函數返回比賽結束的指標,但你應該能夠彌補這一點)。

+0

從命令行怎麼樣? – jonderry 2011-01-13 20:37:52

1

我敢肯定有一個像樣的正則表達式的解決了這個,但我會退到舊index功能:

$_ = q[abc 
bcc 
ccc 
baa]; 

my $z; print $z++,"\n" while 0<=($z=index($_,"c\nb",$z)); 


2 
10