我有文件,文件中的一行看起来像这样

GIVEN=David Smith
GIVEN=John Doe Young
GIVEN=Ms Sam Parker
GIVEN=Mr James Free Foo ABC
GIVEN=Joe Cam-Barr

我只想查找以GIVEN开头的任何行,并找到最后一个空格字符(假设是姓氏),然后换行。

所以输入=
FOO=Bar
GIVEN=David Smith
Baz=123

输出应为
FOO=Bar
GIVEN=David
LAST=Smith
Baz=123

据我所知:
(?<=(GIVEN=))(.*\ )

在这里查看演示http://regexr.com?30uh8

最佳答案

open(my $IN, "<infile.txt") or die $!;
chomp(my @lines = <$IN>);
close $IN;

foreach(@lines){
  s/^(GIVEN\=.+)\s+(\S+)$/$1\nLAST=$2/;
}

open(my $OUT,">outfile.txt") or die $!;
print "$_\n" foreach(@lines);
close $OUT;

应该管用。如果输入文件很大,则根据需要进行修改以逐行读取。

关于regex - 将姓氏拆分到新行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10577325/

10-10 02:22