假设我有my $LIST
,如下所示:
Caterpillar1 is red and hairy
Caterpillar2 is green and schwifty
Caterpillar3 is yellow and schwifty
现在我想要列出的内容基本上是awk {'print $1'}
的等价物。我想从以下列表中获取:
Caterpillar1
Caterpillar2
Caterpillar3
如何在不使用任何外部系统命令的情况下在perl中完成此操作?
答案 0 :(得分:3)
鉴于:
$ echo "$txt"
Caterpillar1 is red and hairy
Caterpillar2 is green and schwifty
Caterpillar3 is yellow and schwifty
您可以对输入执行逐行正则表达式:
$ echo "$txt" | perl -nle 'print $1 if /^(\w+)/'
Caterpillar1
Caterpillar2
Caterpillar3
或者,与评论一样,$ echo "$txt" | perl -nle 'print /^(\w+)/'
您还可以使用逐行自动拆分模式(类似于空格上的awk
拆分):
$ echo "$txt" | perl -lane 'print $F[0]'
Caterpillar1
Caterpillar2
Caterpillar3
如果该多行字符串是单个字符串,只需使用全局正则表达式:
print "$1\n" while $txt=~/^(\w+)/gm;
或者,如评论中那样,
print join "\n", $txt =~ /^(\w+)/mg, '';
答案 1 :(得分:2)
你可以这样做:
@list = map { /^(\S+)/ } split /\n/, $str
获取字符串中每一行的第一个单词列表。
或更优雅:
@list = $str =~ /^(\S+)/mg
答案 2 :(得分:1)
使用split
将该字符串转换为行,然后再次使用它将行转换为单词:
foreach my $line (split /\n/, $LIST)
{
print ((split / /, $line)[0]);
print "\n";
}