我有一个看起来像这样的文本文件:
_map[0x00000044] = "screen";
_map[0x00000059] = "map";
_map[0x0000006e] = "info";
我想替换每行末尾的单词,以便我的输出如下所示:
_map[0x00000044] = "0044";
_map[0x00000059] = "0059";
_map[0x0000006e] = "006e";
我想就地更新文件。我试过以下但是必须有一个更简单的方法。
my $infile = 'newnumbers.txt';
open my $input, '<', $infile or die "Can't open to $infile: $!";
my @finaldata = ();
while (<$input>){
chomp;
print "$1\n" if ($_ =~ /(0x0000.*])/);
push(@finaldata, $1);
}
答案 0 :(得分:3)
use strict;
use warnings;
my $infile = 'newnumbers.txt';
local @ARGV = ($infile);
local $^I = '.bac';
while( <> ){
s/(_map\[0x[[:xdigit:]]{4}([[:xdigit:]]{4})\] = )".*"/$1"$2"/;
print;
}
或者如果您使用的是较新版本的perl,则正则表达式可能是以下
s/_map\[0x[[:xdigit:]]{4}([[:xdigit:]]{4})\] = \K".*"/"$1"/;
答案 1 :(得分:0)
这个怎么样:
my $infile = $ARGV[0] || 'newnumbers.txt';
open FH, $infile;
my @lines = <FH>;
s/(_.*(\w{4})] = ")\w+(";)/$1$2$3/ foreach @lines;
print join '', @lines;