[RndTbl] Another RE problem with sed

Sean Walberg sean at ertw.com
Wed May 9 22:02:40 CDT 2007


I guess the simple answer is because you told it to...  the p command prints
the current pattern space, the -n suppress it.  I'm not sure how to use sed
like grep, which is basically what you're doing :)

This may be a silly observation, but a regexp like ^[0-9A-Za-z][0-9A-Za-z]*
is the same as ^[0-9A-Za-z] (with or without a + at the end) if you're
looking for a simple match and not replacing anything. The second alphanum
doesn't have to match at all because of the *, so there's not much point in
having it!

Quite frankly sed is too much of a pain for anything but the most simple
substitutions.  In your case I'd look at egrep (which supports the +
operator, previous comment notwithstanding) , and for anything more complex,
a perl one liner.

sed 's/something/complex/g' file

is the same as

perl -pe 's/something/complex/g' file

and you can do a lot more things in the code.  You can even edit a file in
place with -i:

perl -i.bak -pe 's/sed/perl -pe/' myscript.sh

or only print certain lines with -n (no print rather than the -p meaning
print)

perl -ne 'if (/\/([^\/]+$)/) { print $1; }' file

(the last one should print the last component of a /path/to/file/name of
lines looking like a file path, and nothing on the rest)

Sean

On 5/9/07, Dan Martin <ummar143 at cc.umanitoba.ca> wrote:
>
> I tried to use a sed command to extract alphanumberic names, one per
> line, from a file which also included comments (line starts with '#')
> and blank lines.  I wanted to refer to each in a loop.
>
> I tried
> for MACHINE in `sed  '/^[0-9A-Za-z][0-9A-Za-z]*/'
> ~/MPI-SRC/machine_names.txt`
> a little awkward because sed has no '+' to indicate "at least one
> alphanumeric".
>
> I got an error that there was no command given to sed.  I thought it
> printed by default.
>
> I tried
> for MACHINE in `sed  '/^[0-9A-Za-z][0-9A-Za-z]*/p'
> ~/MPI-SRC/machine_names.txt`
> and it printed all the names twice.
>
> Finally, I had to use
>
> for MACHINE in `sed -n '/^[0-9A-Za-z][0-9A-Za-z]*/p'
> ~/MPI-SRC/machine_names.txt`
>
> to suppress one copy.
>
> Why do I get "double or nothing"?
>
>
> --
>   -Dan
>
> Dr. Dan Martin, MD, CCFP, BSc, BCSc (Hon)
>
> GP Hospital Practitioner
> Computer Science grad student
> ummar143 at cc.umanitoba.ca
> (204) 831-1746
> answering machine always on
>
> _______________________________________________
> Roundtable mailing list
> Roundtable at muug.mb.ca
> http://www.muug.mb.ca/mailman/listinfo/roundtable
>
>


-- 
Sean Walberg <sean at ertw.com>    http://ertw.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.muug.mb.ca/pipermail/roundtable/attachments/20070509/eabb3ce6/attachment.html


More information about the Roundtable mailing list