perl 文件间的匹配替换

perl 文件间的匹配替换,第1张

my $inputF = @ARGV[0]

my $inputS = @ARGV[1]

my $output = @ARGV[2]

open INPUTF , $inputF or die "cannot open the file:$inputS$!\n"

open INPUTS, $inputS or die "cannot open the file:$inputS$!\n"

open OUTPUT, ">$output" or die "cannot open the file:$inputS$!\n"

our @listN=()

our %listL=()

my @line

while(<INPUTF>)

{

chomp

next unless $_

@listN = split //,$_ #将text1.txt 用“;”分割,放入数组@listN中

foreach my $n(@listN) #每行的内容都放入另一个数组@line里面保存

{ #(直至最后全部存在@line中)

push (@line, $n)

}

}

#print "@line\n" #调试

while(<INPUTS>)

{

chomp

next unless $_

my @map = split /\s+/,$_ #将text2.txt 用空格分割放入数组@map中

$listL{$map[0]}=$map[1] unless exists $listL{$map[0]}#并将$map[0]作为key值存在哈希

}

foreach my $list(@line)#把text1.txt中的全部拿出来找相关的mapping对象

{

if (exists $listL{$list})#如果找到了 证明有mapping object

{

print OUTPUT "number: $list, mapping: $listL{$list}\n" #输出到text3.txt中(自命名)

}

}

#perl F:\perltest\mapping.pl F:\perltest\text1.txt F:\perltest\text2.txt F:\perltest\text3.txt

$values= <OUTFILE>

这样这个变量只读取了一行啊,$/ 中保存这输入行记录分隔符(它的默认分隔符是\n)。因此,每当菱形运算符用于读取数据时,它将一直读取数据,直到它发现与$/一致的字符。所以,如果我们将$/设为 undef ,菱形运算符将读取整个文件并将它们存储在标量中。

要想让perl“吞吃文件”,可以改成这样:

use strict

my $values

open(OUTFILE,"file.txt") or die("Can't find file.txt:$!")

$/ = undef# 此行注掉后,$values 仅读入Logon Failure:

while(defined($values= <OUTFILE>)){

# print $values

if($values =~ /.*User Name:(.*)(.*)/ms){

print $1

print $2

}}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7933622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存