| var common = require('./common'); |
| var fs = require('fs'); |
| |
| //@ |
| //@ ### sed([options ,] search_regex, replace_str, file) |
| //@ Available options: |
| //@ |
| //@ + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_ |
| //@ |
| //@ Examples: |
| //@ |
| //@ ```javascript |
| //@ sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js'); |
| //@ sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js'); |
| //@ ``` |
| //@ |
| //@ Reads an input string from `file` and performs a JavaScript `replace()` on the input |
| //@ using the given search regex and replacement string. Returns the new string after replacement. |
| function _sed(options, regex, replacement, file) { |
| options = common.parseOptions(options, { |
| 'i': 'inplace' |
| }); |
| |
| if (typeof replacement === 'string') |
| replacement = replacement; // no-op |
| else if (typeof replacement === 'number') |
| replacement = replacement.toString(); // fallback |
| else |
| common.error('invalid replacement string'); |
| |
| if (!file) |
| common.error('no file given'); |
| |
| if (!fs.existsSync(file)) |
| common.error('no such file or directory: ' + file); |
| |
| var result = fs.readFileSync(file, 'utf8').replace(regex, replacement); |
| if (options.inplace) |
| fs.writeFileSync(file, result, 'utf8'); |
| |
| return common.ShellString(result); |
| } |
| module.exports = _sed; |