perl - 如何用同一行前面的文本替换单词?

标签 perl

我有一个如下所示的文本文件:

_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);
}

最佳答案

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"/;

关于perl - 如何用同一行前面的文本替换单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21919604/

相关文章:

perl - 在浏览器Perl CGI SSH中显示输出

arrays - 使用数组元素 perl 在文件中搜索字符串

linux - 如何关闭 Net::LDAP::Server

json - 如何通过 key 访问 JSON 中的数据

regex - 如何删除重复的字符但保留其中两个?

perl - 有没有办法从 XS 访问 perl 中的特殊标记?

linux在foreach循环a1,a2,a3中打印变量值

使用标志进行 Perl 调试

mysql - 逐行读取文件而不将整个文件加载到内存中

PERL 计算不可打印字符