I maintain that the average human
being looking at sed commands
would rather end up standing on his 
head for a significant amount of
time to avoid it :)))

BTWY, I have been scripting under u*x 
for a few decades by now.
I resort to it when nothing and I 
mean nothing (think about Daffy Duck's
voice  here) else can do it :))

Luc P.


Luc P.


> 
> 
> On Wednesday, June 4, 2014 9:42:41 AM UTC-5, Mars0i wrote:
> >
> > ... Then I add the new functions to the declare statement by hand, or I 
> > periodically do something like:
> >
> > grep defn mysourcefile.clj >> mysourcefile.clj
> > (Be careful to use two ">"s!)
> >
> > and then I edit the junk at the end of the file into a declare statement 
> > at the top of the file.  And maybe if f I were ... lazier, I'd code a 
> > script that would update the declare in one pass.
> >
> 
> OK, I couldn't resist my own implicit challenge. 
> 
> #!/bin/sh
> sourcefile="$1"
> newsourcefile="new.$sourcefile"
> 
> newdeclare=$(echo '(declare' \
>     `sed -n '/defn/s/(defn-* //p' "$sourcefile" | tr '\n' ' '` ')' \
>     | sed 's/ )/)/')
> 
> sed "s/(declare .*/$newdeclare/" "$sourcefile" > "$newsourcefile"
> 
> This writes a new version of the file named new.<oldfilename>. Or if you 
> either trust your script or trust your backups, and are on a system that 
> includes the mighty ed <http://www.gnu.org/fun/jokes/ed.msg.html> editor, 
> you can replace the last line with:
> 
> echo "1,\$s/(declare .*/$newdeclare/\nw\n" | ed "$sourcefile"
> 
> which edits the file in place, assuming that the previous version of the 
> declaration was on one line.  You may want to use a different scriptable 
> editor.
> 
> The messy part is the sed and tr line:
> 
>     `sed -n '/defn/s/(defn-* //p' "$sourcefile" | tr '\n' ' '`
> 
> The sed part finds all of the lines with "defn" in them, then substitutes 
> the empty string for "(defn" or "(defn-".   'tr' then removes the newlines 
> between the function names, replacing the newlines with spaces.  You'll 
> need something a little more complicated if you put the parameter vector or 
> anything else on the same line as the function name.  The 'echo' on the 
> previous line, along with the final ')' adds "(declare" and its closing 
> parenthesis.  Those two lines can be used by themselves to generate a 
> declare statement from the command line. The 'sed' command after these 
> lines isn't necessary; it just removes an unnecessary space before the 
> closing parenthesis. 
> 
> Obviously, there will be source files on which this won't work.  It's not 
> worth making it foolproof.
> 
> It's a certainty that others would code this more elegantly or more 
> succinctly.  It could be written in Clojure, obviously, but still wouldn't 
> be foolproof unless someone hacks it from the Clojure parser.
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
> 
--
Luc Prefontaine<lprefonta...@softaddicts.ca> sent by ibisMail!

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to