|
From: | Friedrich Dominicus |
Subject: | Re: A very simple question on SED or AWK for a GURU, possibly a lisp script or emacs batch processing of many files |
Date: | 14 Jan 2003 08:13:56 +0100 |
User-agent: | Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Military Intelligence) |
gnuist006@hotmail.com (gnuist006) writes: > Here is the type of lines I have in a file: > > junk label="junk1/junk2/junk3/.../junkn/" more junk > > I want to find every line that has > > label="..." > > pattern > > and then I want to replace every / by _ inside the > quotes. > > For the purposes of continuity, I want the script to look like this: > > cat file | > sed commands | > awk commands | you do not nead cat for just one file. > > etc. > > I do not care if it all sed or awk or in what order. Well you posted to c.l.lisp here's a Lisp solutoin for one file. It is left to you to expand to more files (which is not too difficult) (defun q-2003-01-14 (in-file) (let ((out-file (concatenate 'string (subseq in-file 0 (position #\. in-file :from-end t)) ".out"))) (with-open-file (out out-file :direction :output :if-does-not-exist :create :if-exists :supersede) (clawk:for-file-lines (in-file) (when (clawk:match clawk:$0 "label=\"\(.*)\"") (let* ((submatch (aref clawk:*regs* 1)) (substr (subseq clawk:$0 (car submatch) (cdr submatch)))) (replace clawk:$0 (pregexp-replace* "/" substr "_") :start1 (car submatch) :end1 (cdr submatch)))) (princ clawk:$0 out) (terpri out) (values))))) With this file junk label="junk1/junk2/junk3/junk4" other stuff other junk label="j1/j2/j3" other stuff and much more nothing label="/t1/t2/t3" I got this result junk label="junk1_junk2_junk3_junk4" other stuff other junk label="j1_j2_j3" other stuff and much more nothing label="_t1_t2_t3" Quite nice scripting with Common Lisp IMHO :) Regards Friedrich
[Prev in Thread] | Current Thread | [Next in Thread] |