Replace all occurrences of a regular expression within a file. (define (regexp-substitute/file file re . items) (let ((file-contents (call-with-input-file file (lambda (in) (read-string (file-size file) in))))) (call-with-output-file file (lambda (out) (apply regexp-substitute/global out re file-contents items))))) ---- A variant: perform a couple of simple string substitutions on a file (and don't worry about undefined behaviour or robustness in general, roll on, drunk, dazed, and confused, in a skimpy leather mini, your black beard untrimmed, remainders of soup and the few copper coins splashed over the boulevard). Tried in scsh 0.6.7. ;; substis : proper list of (from . to) pairs of strings (define (apply-substitutions-to-file substis fname) (let ((content/substis (with-input-from-file fname (lambda () (fold (lambda (substi content) (regexp-substitute/global #f (rx ,(car substi)) content 'pre (cdr substi) 'post)) (read-delimited "") substis))))) (with-output-to-file fname ; truncate (lambda () (display content/substis))))) (define (apply-substitutions-to-files substis fnames) (for-each (lambda (fname) (apply-substitutions-to-file substis fname)) fnames)) #! Examples (apply-substitutions-to-file '(("é" . "\" eacute \"") (">" . "\" > \"")) "../pages/demo.scm") (apply-substitutions-to-files '(("é" . "\" eacute \"") ("É" . "\" Eacute \"") ("è" . "\" egrave \"") ("à" . "\" agrave \"") ("À" . "\" Agrave \"") ("ò" . "\" ograve \"") ("ù" . "\" ugrave \"") ("í" . "\" iacute \"") ("ß" . "\" szlig \"") ("ü" . "\" uuml \"") ("ö" . "\" ouml \"") ("ä" . "\" auml \"") ("â" . "\" acirc \"") ("ê" . "\" ecirc \"") ("«" . "\" laquo \"") ("»" . "\" raquo \"") ("“" . "\" ldquo \"") ("”" . "\" rdquo \"") ("‘" . "\" lsquo \"") ("’" . "\" rsquo \"") ("„" . "\" bdquo \"") ("—" . "\" mdash \"") ("–" . "\" 8211 \"") ("—" . "\" 8212 \"") ("“" . "\" 8220 \"") ("”" . "\" 8221 \"") (">" . "\" > \"")) (glob "../pages/*.scm")) !#