我有多行文字:
我想在一行和输出中找到第一次出现“ship”:
这艘船是第1艘。
我希望在一行中找到第二次出现“ship”并输出:
这艘船是2号船。
答案 0 :(得分:4)
use strict;
use warnings;
use Lingua::EN::Inflect 'ORD';
my $text = "ship plane\n ship\n car";
my @ships = $text =~ /(ship)/g;
for ( my $i = 0; $i < @ships; $i++ ) {
my $ship_num = ORD($i + 1);
print "The ship is the $ship_num one\n";
}
&ORD
将处理您的序数后缀。
答案 1 :(得分:0)
$n = 1;
while (<>)
{
if (m%ship%)
{
print "The ship is the $n th one\n"; # You can do the st, nd etc
++$n;
}
}
应该工作
答案 2 :(得分:0)
perl -lne'
if (/^ship$/) {
++$seen;
print "The is a 1'\''st one" if $seen == 1;
print "The is a 2'\''nd one" if $seen == 2;
}
' file
或者如果你想要超过前两个:
perl -lne'
print "The is a ", ++$seen, " one" if /^ship$/;
' file
可能有一个模块来处理找到正确的后缀。我会让你调查一下。
答案 3 :(得分:0)
这是你要找的吗?
my $th
= ( ( int( $n % 100 / 10 ) != 1 )
&& [ qw<th st nd rd> ]->[ $n % 10 ]
)
|| 'th'
;
print "The ship is the $n$th one."