Init : someone could comment this ?

Nils Philippsen nphilipp at redhat.com
Tue Jan 8 15:23:42 UTC 2008


On Mon, 2008-01-07 at 15:27 -0800, Andrew Farris wrote:
> Enrico Scholz wrote:
> >>>>> But python or other bloaty scripting languages are not a solution
> >>>>> and completely unacceptable at this place.
> >>>> "Bloaty" is something that could be solved, don't you think?
> >>> Not with python or perl.
> >> I've shown you the numbers. Why you still insist on it being bloated
> > 
> > Resulting scripts will be much longer.  E.g. how much lines of python
> > code are required for
> > 
> > | sed '/^foo/s!/bin!/opt!' file | tac
> 
> Looks like one line in python to me if you write a sed and tac replacement into 
> your python library. (e.g. thats not about bash vs python at all...)

If I'm not to try to emulate the single commands, but look at the whole
job which I understand as "read file, replace first occurrence of '/bin'
with '/opt' in lines beginning with 'foo', then put out the lines in
reversed order" it could be along this (and wouldn't use any external
module or program):

print '\n'.join (reversed (map (lambda line: line[:3] == "foo" and line.replace ('/bin', '/opt', 1) or line, ''.join (open ('file').readlines ()).split ('\n'))))

To make this more readable, I'd split this up and comment it:

--- 8< ---
# read the file and split it at '\n'
lines = ''.join (open ('file').readlines ()).split ('\n')

for i in range (len (lines)):
	if line[:3] == 'foo':
		# replace first occurrence of /bin with /opt
		lines[i] = lines[i].replace ('/bin', '/opt', 1)

print '\n'.join (reversed (lines))
--- >8 ---	

Now the original sed can surely be changed that it would take more than
one line to emulate the line's function, but then I would feel
comfortable using (shipped) modules like "re" to achieve the same effect
as the shell code uses sed and tac.

Nils
-- 
     Nils Philippsen    /    Red Hat    /    nphilipp at redhat.com
"Those who would give up Essential Liberty to purchase a little Temporary
 Safety, deserve neither Liberty nor Safety."  --  B. Franklin, 1759
 PGP fingerprint:  C4A8 9474 5C4C ADE3 2B8F  656D 47D8 9B65 6951 3011




More information about the fedora-devel-list mailing list