#!/usr/bin/env perl use v5.10; use strict; use warnings; use Math::BigInt; use constant offset => Math::BigInt->new('0x500000000'); while (my $line1 = ) { # if addr 0x10000 written like 0x010000 then # 0x(?:[[:xdigit:]]{2})+)\b may validate memory address my ($addr) = $line1 =~ /addr:(0x[[:xdigit:]]+)\b/; # print "addr is $addr\n"; if (defined $addr) { my $new_addr = sprintf "0x%x", hex($addr) + offset; if ($line1 =~ s/ \baddr: \K $addr (?=\s+qospri:) /$new_addr/x ) { print $line1; } else { print STDERR "unchanged\n"; print $line1; } } } __DATA__ chn:req mon:orig cmd:SDP_CMD_WRSIZEDFULL tag:0x3b9aca01 addr:0xdf7780 qospri:0 len:0xf