in reply to Re: Running complex sed from perl
in thread Running complex sed from perl

here is the code that I used, to test based on the the information given, I used a perl one liner to validate it works without a hitch

 perl -pi.back -e 's#\D*(\d{3})\D*(\d{3})\D*(\d{4})#(${1}) ${2}-${3}#s;' clients.txt

Now of course, I realized the flaw in my thinking, and several components of the script are completely written on Linux systems, the flaw of course is that when testing the perl script on a windows system without say cgywin and only strawberry or absolute perl calls for awk and sed will not work. Luckly at this point there is only a single awk command left. All it does is place double quotes around each line in the output.txt file so that the perl script can then modify the other lines with the necessary formating. If I can figure out how to get double quotes at the begining and end of each line, then when its formated it can be converted into a CSV file and imported into a DB.

Replies are listed 'Best First'.
Re^3: Running complex sed from perl
by shmem (Chancellor) on Dec 02, 2013 at 03:29 UTC
    If I can figure out how to get double quotes at the begining and end of each line...

    There are several ways to do that.

    # if the current line is in $_ s/^|$/"/g; # if the current line is in $line $line =~ s/^|$/"/g; # or with [doc://substr] substr $_, 0, 0, '"'; substr $_, length $_, 0, '"'; # but it is simpler just to append a " $_ .= '"'; # or even $_ = '"' .$_ . '"';
    perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'

      I attempted this and I get a double quote in front of each line, that was one of the issues I was having with the perl componet, which was I returned to awk. Do you have any idea why only the beginning lines get two double quotes? The same thing occurs when I attempted to make a one liner out of the sed call for the double quotes.

        Your lines probably end with newlines (carriage returns), so your end quote ends up at the beginning of the next line. To avoid that, chomp the line, add your quotes, then print it with a newline:

        chomp $line; $line = qq|"$line"|; print "$line\n";

        Aaron B.
        Available for small or large Perl jobs and *nix system administration; see my home node.

Re^3: Running complex sed from perl
by 2teez (Vicar) on Dec 02, 2013 at 05:15 UTC

    Hi sunglant,

    If I can figure out how to get double quotes at the begining and end of each line, then when its formated it can be converted into a CSV file and imported into a DB.
    I really don't know why you are trying to code in sed and awk using perl.
    Since perl can do want you want why not write all your script in perl altogether? Then using a module like Text::CSV or Text::CSV_XS you can get your dataset in csv then getting all of that into your preferred DB still using perl.

    If you tell me, I'll forget.
    If you show me, I'll remember.
    if you involve me, I'll understand.
    --- Author unknown to me
Re^3: Running complex sed from perl
by wazat (Monk) on Dec 02, 2013 at 04:35 UTC

    There is more than one way to do it. You could add double quotes via additional search and replace.

    perl -pi.back -e 's#\D*(\d{3})\D*(\d{3})\D*(\d{4})#(${1}) ${2}-${3}#s; + s#^#""; s#$#"#' clients.txt