12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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;
|