http://qs321.pair.com?node_id=1028997


in reply to Re^2: RE question; how to insert a digit between const[a-z]*3 && inc[0-9]*3?
in thread RE question; how to insert a digit between const[a-z]*3 && inc[0-9]*3?

Given that context, you might want to try something like this technique (untested):

while (defined($file = readdir(DIR))) { next unless $file =~ /^(abc)(\d{1,3})(\.html)$/; rename "$dirname/$file" "$dirname/" . $1 . "0" x (4 - length $2) . + $2 . $3; }

I'd also recommend that you try this with a print to ensure you're in the right directory and targetting the correct files before making thousands of changes; then change to rename. Some error checking/handling might also be useful.

-- Ken

  • Comment on Re^3: RE question; how to insert a digit between const[a-z]*3 && inc[0-9]*3?
  • Download Code

Replies are listed 'Best First'.
Re^4: RE question; how to insert a digit between const[a-z]*3 && inc[0-9]*3?
by taint (Chaplain) on Apr 16, 2013 at 22:09 UTC
    Greetings Ken, and thanks again!
    Your example(s) both work exactly as you indicated they would.
    Took me awhile to sort it all out. But I'm afraid I wasn't as clear, or as concise
    as I could/should have been -- soory. :(
    I had already performed a mas-rename on the files by cobbling a sh(1) script, with the
    help of find(1), basename(1), cp(1), && rm(1) through a for loop.
    This is what left me with the task of correcting the references to the files previous
    names within the newly named files. This is where my request came in -- again, sorry for not better clarifying.
    I tried to apply your logic to the task of reading the contents of the files
    and applying it to their contents. But I guess I'm just not yet proficient enough in perl(1). :(
    So I got anxious, and mostly conquered the abc100 - abc999.html's
    via another sh(1) script
    #!/bin/sh - # fixem -- a simple stupid && inefficient shell script for name in $(find . -type f -name '*.html' -maxdepth 1) do # sed(1) recognizing Extended RE(s) sed -Ef fixem.sed <$name >temp.txt mv temp.txt $name done rm -f temp.txt
    fixem.sed
    /abc([1-9][0-9][0-9])\.html/s/abc/abc0/g
    While that shell script fixed most of the occurrences, it missed a few, and it
    also didn't address abc1 - 99.html. So now I'm going to try and figure out how
    to best attack/accomplish this same (il)logic in perl(1). :)

    Any pointers/guidance/solutions still greatly appreciated. :)

    Thanks again for everyones' time, and consideration.

    --chris

    #!/usr/bin/perl -Tw
    use perl::always;
    my $perl_version = "5.12.4";
    print $perl_version;