#! /bin/sh # -*- Scheme -*- ## Emilio C. Lopes , 2005-10-10 exec scsh -e main -s "$0" "$@" !# (define (grep-port regexp port printer) (do ((line (read-line port) (read-line port)) (line-number 1 (+ line-number 1))) ((eof-object? line) 'done) (if (regexp-search? regexp line) (printer line-number line)))) (define (grep regexp file) (call-with-input-file file (lambda (port) (grep-port regexp port (lambda (lineno line) (format #t "~a:~a:~a~%" file lineno line)))))) (define (main prog+args) (let ((nargs (length (cdr prog+args)))) (cond ((= nargs 0) (error (format #f "scsh-grep: expecting one or more arguments, got ~a" nargs))) ((= nargs 1) (grep-port (posix-string->regexp (cadr prog+args)) (current-input-port) (lambda (lineno line) (format #t "~a:~a~%" lineno line)))) (else (for-each (lambda (file) (grep (posix-string->regexp (cadr prog+args)) file)) (cddr prog+args))))))