Usage: mlgrep -h
       -h:  help
       mlgrep [-{igjcsewoaN}] [-n|-l] [-q[<len>]] [-{CHJLMPRS}|-r <pattern> ...] \
              [-X] [-x <regexp> ...] <regexp> [<files ...>]
| Command flag | Description | 
|---|---|
-a | 
use absolute pathnames in printouts of matches | 
-c | 
no comments (don't search within C/C++/Java/Ruby comments) | 
-e | 
exclude self, i.e. don't search in files whose name matches the regexp we're searching for | 
-g | 
ignore errors (file not found, encoding, etc) | 
-i | 
ignore case | 
-j | 
invoke IntelliJ IDEA and wait for user input between each match | 
-k | 
print statistics about occurrences of the regexp | 
-l | 
list (just print names of files where a match was found) | 
-n | 
line mode (a dot (.) or \s in regexp doesn't match newline and the whole line where a match was found is printed) | 
-o | 
only match. If the regexp contains a group (a parenthesized expression), only text matching that group, rather than the entire regexp match, will be printed. | 
-r <pattern> | 
search in files matching the pattern (e.g. -r "*.skel") The directory tree starting at current directory is searched. | 
-s | 
no strings (don't search within double quoted strings) | 
-w | 
match whole words only | 
-x <regexp> | 
exclude files whose names match the regexp | 
-X | 
exclude files according to 'exclude' property in ~/.mlgrep.yml | 
-C | 
equivalent to -r '*.{cc,c}' (C, C++) | 
-H | 
equivalent to -r '*.{hh,h}' (C/C++ headers) | 
-J | 
equivalent to -r '*.java' (Java) | 
-L | 
equivalent to -r '*.{pl,PL,pm,pod,t}' (Perl) | 
-M | 
equivalent to -r '{*.cmake,CMakeLists.txt}' (CMake) | 
-P | 
equivalent to -r '*.py' (Python) | 
-R | 
equivalent to -r '*.rb' (Ruby) | 
-S | 
equivalent to -r <'source' pattern defined in ~/.mlgreprc> | 
-T | 
equivalent to -r '*.{html,htm,xhtml,xml,css}' | 
-q[<len>] | 
quiet - output first and last characters, default is 20 | 
-N | 
don't print file names and line numbers | 
While the unix grep is line-based, this command can search over line
breaks. Rather than printing lines where a match was found, mlgrep
prints the matching part of the file (replacing each sequence of
whitespace with a single space). Spaces in the regexp can match any
combination of whitespace in the file, and . (dot) matches any
character including newline. To match exactly one space, escape it
with a backslash or put it inside square brackets. To match any
character except newline, use [^\n].
Option flags can be compounded. I.e., -ics means -i -c -s.
\uX (where X is an optionally backslash-escaped single character
or a class of characters within square brackets) matches everything up
to the first occurrence of X (\u is for until). For example,
/\u;/ is replaced by /[^;]*;/ and /\u[123]/ is replaced by
/[^123]*[123]/.
Pattern options (-r, -C, -H, -J, -L, -M, -P, -S) may be
combined with each other and with files....
Search all source code for single statements inside braces:
$ mlgrep -Ssc '[^(]\) \{[^;{}]*; \}'Search in C++ files - excluding generated code - for null pointer check after allocation (which is pointless in Dicos):
$ mlgrep -x '/(generated|user|provider)' -CHc '(\w+) = (new|\w+ :: construct \()\u; [^}]* if \( \1 == (0|NULL)'Strip comments from cc files and write them to temporary files:
$ for i in *.cc; do mlgrep -Nnc . $i > /tmp/$i; doneExample of ~/.mlgrep.yml:
exclude: '/(test|user|generated|provider|included|.deps|delosInfo|obj\.)'