mirror of
https://github.com/apache/cordova-android.git
synced 2025-02-27 04:42:51 +08:00
53 lines
1.4 KiB
JavaScript
53 lines
1.4 KiB
JavaScript
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;
|