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
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