| var common = require('./common'); |
| var fs = require('fs'); |
| |
| //@ |
| //@ ### grep([options ,] regex_filter, file [, file ...]) |
| //@ ### grep([options ,] regex_filter, file_array) |
| //@ Available options: |
| //@ |
| //@ + `-v`: Inverse the sense of the regex and print the lines not matching the criteria. |
| //@ |
| //@ Examples: |
| //@ |
| //@ ```javascript |
| //@ grep('-v', 'GLOBAL_VARIABLE', '*.js'); |
| //@ grep('GLOBAL_VARIABLE', '*.js'); |
| //@ ``` |
| //@ |
| //@ Reads input string from given files and returns a string containing all lines of the |
| //@ file that match the given `regex_filter`. Wildcard `*` accepted. |
| function _grep(options, regex, files) { |
| options = common.parseOptions(options, { |
| 'v': 'inverse' |
| }); |
| |
| if (!files) |
| common.error('no paths given'); |
| |
| if (typeof files === 'string') |
| files = [].slice.call(arguments, 2); |
| // if it's array leave it as it is |
| |
| files = common.expand(files); |
| |
| var grep = ''; |
| files.forEach(function(file) { |
| if (!fs.existsSync(file)) { |
| common.error('no such file or directory: ' + file, true); |
| return; |
| } |
| |
| var contents = fs.readFileSync(file, 'utf8'), |
| lines = contents.split(/\r*\n/); |
| lines.forEach(function(line) { |
| var matched = line.match(regex); |
| if ((options.inverse && !matched) || (!options.inverse && matched)) |
| grep += line + '\n'; |
| }); |
| }); |
| |
| return common.ShellString(grep); |
| } |
| module.exports = _grep; |