regex - 将姓氏拆分到新行

标签 regex perl unix awk

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

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/

相关文章:

shell - 如何使用 time 命令但仅对脚本的一部分进行计时

regex - Sed 不使用正则表达式

perl - 在 Perl 中,如何使用 SSH key 而不是密码来 FTP 文件?

perl - 如何转储所有 Mojolicious 路线?

java - Unix 脚本 : accessing required . 耳文件(按文件名掩码)

shell - 在 awk 中修剪字符串的前导和尾随空格

regex - 通过 bash 命令增加文件中的版本号

sql - 我可以通过哪些方式提高 PostgreSQL 8 中正则表达式查询的性能?

java - 模式编译器和匹配器中的组

perl - 检查 perl 中是否存在返回总是 true