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.