Re: Need help w/ reqexp, capture and substitue



Dennis G. Wicks wrote:
Greetings;

I frequently have to convert some address books from one format to another. This is what I need to do.

Input records are like this:

wix@xxxxxxxxxx&Thu Oct 26 07:20:03 2006&1&&&&&&&

The output record needs to be like this:

wix@xxxxxxxxxx&Thu Oct 26 07:20:03 2006&1&wix&&&&&&

In other words, get the user name from the email address and insert it between the 2 ampersands after the number that follows the year. The ampersands are field separators
and there will always be an email, a date, and a number.

I can capture the user name and I can substitute something in between the ampersands, but I can't substitute the user name between the two ampersands.

Here is what I have up now:

perl -i -p -e 'm/^(.*)?@/;s/\&\&/\&$1\&/;' test.txt

There is a key piece of this that I can't figure out.

Any help greatly appreciated!


Hi Dennis

This is failing because the match part of the substitution is succeeding and so
wiping the contents of $1 since it doesn't contain a capture. Save it in another
variable first:

m/^(.*)?@/;
my $user = $1;
s/&&/&$user&/;

(you don't need to escape the ampersands.)

Cheers,

Rob
.



Relevant Pages

  • Need help w/ reqexp, capture and substitue
    ... Input records are like this: ... The output record needs to be like this: ... get the user name from the email address and insert it between the 2 ampersands after the number that follows the year. ... I can capture the user name and I can substitute something in between the ampersands, but I can't substitute the user name between the two ampersands. ...
    (perl.beginners)
  • Re: Need help w/ reqexp, capture and substitue
    ... The output record needs to be like this: ... between the 2 ampersands after the number that follows the year. ... I can capture the user name and I can substitute something in between ... Perl isn't a toolbox, but a small machine shop where you can special-order ...
    (perl.beginners)