Regex perl字段内的替换
我需要解析许多分隔文件,我有一个问题。在while循环中,如何在字段中进行替换?让我给出一些示例代码和数据 数据示例:Regex perl字段内的替换,regex,perl,join,split,Regex,Perl,Join,Split,我需要解析许多分隔文件,我有一个问题。在while循环中,如何在字段中进行替换?让我给出一些示例代码和数据 数据示例: 单词、姓名、号码、你/我、数据 你好,乔希,123,我,数据 你好,乔,222,我,数据 目标: 在本例中,我想做的是对$[2]和$[3]进行替换 换句话说,字段$[2]将是数字字段$[3] 将是“你/我”字段 我的代码中包含以下内容: my @F = split; while (<>) { if ($F[3] =~ /^You$/ print "Me"
单词、姓名、号码、你/我、数据
你好,乔希,123,我,数据
你好,乔,222,我,数据
目标:
在本例中,我想做的是对$[2]和$[3]进行替换
换句话说,字段$[2]将是数字字段$[3] 将是“你/我”字段
我的代码中包含以下内容:
my @F = split;
while (<>) {
if ($F[3] =~ /^You$/ print "Me";) next;
if ($F[2] =~ /^222$/ print "P";) next;
if ($F[2] =~ /^123$/ print "P";) next;
print @F;
}
我只想在指定的字段上执行替换,其他内容保持不变
此外,我可能会有一个场景,我想用完全不同的东西来划分某些字段,而其他一切都保持不变。我还想使用标量
数据示例:
单词、姓名、号码、你/我、数据
你好,乔希,123,我,数据
你好,乔,222,我,数据
预期结果:
单词、姓名、号码、你/我、数据
你好,Josh,P-Me,数据
你好,乔,P-Me,数据
带有标量的示例
my $numbers = qw/222|123/;
my @F = split;
while (<>) {
if ($F[3] =~ /^You$/ print "Me";) next;
if ($F[2] = /^$numbers$/ print "P";) next;
join ("-",$[2],$[3]);
print @F;
}
my$numbers=qw/222 | 123/;
我的@F=分裂;
而(){
如果($F[3]=~/^You$/打印“我”;)下一步;
如果($F[2]=/^$numbers$/打印“P”;)下一步;
联接(“-”,$[2],$[3]);
打印@F;
}
因此,最后,我想知道如何替换in字段,使用不同的分隔符连接特定字段,并在这种拆分/连接脚本中实现标量。是否将“you”更改为“Me”?您想要的结果表明您不喜欢更改,但您的代码却不喜欢更改
我想你可以使用$F[2]=~s/^123$/p/
。请参见perldoc perlre
如果您想使用在位版本,可能需要使用$^I
变量。
请参见
perldocperlval
此perl
脚本满足您的需要
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
my $file = "file";
local @ARGV = $file;
local $^I = '.bak';
my $numbers = qr/^(?:222|123)$/;
while (<>) {
print and next if /^\s+$/ or $.==1;
my @flds = split /,/;
$flds[2] = "P" if $flds[2] =~ $numbers;
$flds[3] = "Me" if $flds[3] eq "You";
print join ",", @flds[0,1], join ("-", @flds[2,3]), @flds[4..$#flds];
}
#unlink "$file$^I";
我们使用$^I
变量进行就地更改,同时创建扩展名为.bak
的原始备份。我们在,
上拆分行,并填充一个名为@flds
的数组
然后,我们进行两次检查,如果检查成功,我们将对字段进行更改。检查完成后,我们打印数组,其中包含每个成功测试的修改字段
取消链接
被注释掉。如果不想备份文件,可以取消注释
您可以删除print和next,除非/\S/如果文件中没有任何空行或不希望在输出中保留空行,则代码>行
Word,Name,Number,You/Me,Data
Hello,Josh,P-Me,Data
Hello,Joe,P-Me,Data