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@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@cc.umanitoba.ca (204) 831-1746 answering machine always on
Roundtable mailing list Roundtable@muug.mb.ca http://www.muug.mb.ca/mailman/listinfo/roundtable