2012-03-11 14 views
4

共通のlispでファイルの一括編集を行う方法を知りたい。私はこれを必要とし、perlとbashを使っていました。私は奇妙なことからcommon-lispの解決法を知りたいです。共通のlispで一括ファイル編集を行うには?

私は次のように使用:

find -name '*.lisp' -execdir perl -0777 -pi.bak -e 's/foo/bar/mi' '{}' '+' 

、それが魅力のように働きました。

上記のコマンドは、ディレクトリ(およびそのサブディレクトリ)内のすべてのファイルをperlプログラムに送ります。 perlプログラムは正規表現「foo」を検索し、それを正規表現「bar」に置き換え、新しい(編集した)ファイルを所定の場所に保存します。

CLソリューションで提供できるガイダンスをお寄せいただきありがとうございます。

+1

UNIXのコマンド・ラインは素晴らしいですあなたがLispを使わなければならない場合は、 'mapcar'、' directory'、 'with-open-file'、' read-char'、 'read-line'、' write-char'、 'write http://www.lispworks.com/documentation/HyperSpec/Front/の「マニュアル」の「-line」と「replace」を参照してください。 –

+2

上記の行が何であるかを説明するために単純な言葉を使用したいと思うかもしれません、誰もが知っていると仮定しないでください –

答えて

1

perlの代わりにsbcl --noinform --quit --evalを使用できます。

(progn 
    (require :cl-ppcre) 

    (let* ((file (nth 4 *posix-argv*)) 
     (buf (make-array (file-length file) 
          :element-type 'character :adjustable t :fill-pointer t))) 
    (setf (fill-pointer buf) (with-open-file (in file) 
           (read-sequence buf in))) 
    (princ (ppcre:regex-replace-all "foo" buf "bar")))) 

をまたはファイルを養うことができるかどうかのライン・バイ・ライン:

スクリプトの内容については、このようなものは動作するはず

(progn 
    (require :cl-ppcre) 
    (princ (ppcre:regex-replace-all "foo" (read-line) "bar"))) 
関連する問題