我的文件包含100行
4567
我在我的文件中匹配一个模式。例如,搜索200.0.0.0
并将500.0.0.0
替换为4567 DEF 500.0.0.0
,以便该行现在查看my $file = "$file_path/file.lst";
my $newid = "500.0.0.0"
open MAST, $file or die "Unable to open file.lst: $!";
my $new = "$file.tmp.$$";
my $bak = "$file.bak";
open(NEW, "> $new") or die "can't open $new: $!";
while (<MAST>) {
my ($pattern,$id) = (split /\s+/, $_)[0,4];
print $_;
if ( $_ =~ m/^$pattern/ ) {
$_ =~ s/$id/$newid/g;
}
(print NEW $_) or die "can't write to $new: $!";
}
close(MAST) or die "can't close $file: $!";
close(NEW) or die "can't close $new: $!";
rename($file, $bak) or die "can't rename $file to $bak: $!";
rename($new, $file) or die "can't rename $new to $file: $!";
。
Gradle 1.7
我需要做什么:
在更改前和屏幕上更改后显示行,并要求用户确认并稍后继续处理其他事项。
请建议。
答案 0 :(得分:0)
如果执行代码,它将显示编译错误,因为语句未在第二行终止
在shebang line之后,始终在程序之上使用use warnings;
和use strict;
。
这是一种搜索模式并替换的方法:
#!/usr/bin/perl
use warnings;
use strict;
my $file = "file.txt";
my $newid = "500.0.0.0";
my @update;
open my $fh, "<", $file or die $!;
while ( my $line = <$fh> )
{
my ($pattern, $id) = (split(/\s+/, $line))[0, 2]; #split line to get first and third column value
if ($pattern =~ m/4567/)
{
print "Before change: $line\n";
$line =~ s/$id/$newid/g; #replace id with newid when pattern is 4567
print "After change: $line\n";
#print "Confirm with Yes or No: "; #here you can for confirmation
#chomp(my $confirmation = <STDIN>);
}
push @update, $line;
}
close $fh;
#modify the file
open my $fhw, ">", $file or die "Couldn't modify file: $!";
print $fhw @update;
close $fhw;
----------file.txt----------
1234 ABC 100.0.0.0
4567 DEF 200.0.0.0
它还会在更改前和控制台上更改后打印匹配的行。您可以根据需要修改此代码。确认部分在你的问题中不是很清楚。
答案 1 :(得分:0)
如果没有用户确认元素,则会执行此操作:
diff
您是否需要每位用户确认?您可以使用{{1}}检查这是否符合您的要求。