- 
      
- 
        Save tclh123/8400106 to your computer and use it in GitHub Desktop. 
| #ack is a tool like grep, designed for programmers with large trees of heterogeneous source code | |
| #to install ack, see http://betterthangrep.com/ | |
| #to use ack, launch terminal (mac osx) and type 'ack <some_keywords>' | |
| #ack will search all files in the current directory & sub-directories | |
| #here's how I have my config file setup. this file is located on mac osx here | |
| # ~/.ackrc | |
| # Always sort the files | |
| #--sort−files | |
| # Always color, even if piping to a another program | |
| --color | |
| # Use "less −r" as my pager | |
| # --pager | |
| # less -r | |
| --ignore-dir=.idea/ | |
| --ignore-dir=node_modules/ | |
| #make sure ack knows how to search common filetypes used in rails projects | |
| --type-add=css=scss | |
| --type-add=ruby=.haml,.rselm,.feature,.ru,.lock | |
| --type-set=coffeescript=.coffee | |
| --type-set=coffee=.coffee | |
| #make sure ack knows how to search common filetypes used in node.js projects | |
| --ignore-dir=node_modules | |
| --type-set=coffee=.coffee | |
| --type-set=jade=.jade | |
| --type-set=feature=.feature | |
| --type-set=json=.json | 
ack's command-line switches (ack --help)
Usage: ack [OPTION]... PATTERN [FILES OR DIRECTORIES]
Search for PATTERN in each source file in the tree from the current
directory on down.  If any files or directories are specified, then
only those files and directories are checked.  ack may also search
STDIN, but only if no file or directory arguments are specified,
or if one of them is "-".
Default switches may be specified in ACK_OPTIONS environment variable or
an .ackrc file. If you want no dependency on the environment, turn it
off with --noenv.
Example: ack -i select
Searching:
-i, --ignore-case             Ignore case distinctions in PATTERN
--[no]smart-case              Ignore case distinctions in PATTERN,
only if PATTERN contains no upper case.
Ignored if -i is specified
-v, --invert-match            Invert match: select non-matching lines
-w, --word-regexp             Force PATTERN to match only whole words
-Q, --literal                 Quote all metacharacters; PATTERN is literal
Search output:
--lines=NUM                   Only print line(s) NUM of each file
-l, --files-with-matches      Only print filenames containing matches
-L, --files-without-matches   Only print filenames with no matches
--output=expr                 Output the evaluation of expr for each line
(turns off text highlighting)
-o                            Show only the part of a line matching PATTERN
Same as --output='$&'
--passthru                    Print all lines, whether matching or not
--match PATTERN               Specify PATTERN explicitly.
-m, --max-count=NUM           Stop searching in each file after NUM matches
-1                            Stop searching after one match of any kind
-H, --with-filename           Print the filename for each match (default:
on unless explicitly searching a single file)
-h, --no-filename             Suppress the prefixing filename on output
-c, --count                   Show number of lines matching per file
--[no]column                  Show the column number of the first match
-A NUM, --after-context=NUM   Print NUM lines of trailing context after
matching lines.
-B NUM, --before-context=NUM  Print NUM lines of leading context before
matching lines.
-C [NUM], --context[=NUM]     Print NUM lines (default 2) of output context.
--print0                      Print null byte as separator between filenames,
only works with -f, -g, -l, -L or -c.
-s                            Suppress error messages about nonexistent or
unreadable files.
File presentation:
--pager=COMMAND               Pipes all ack output through COMMAND.  For
example, --pager="less -R".  Ignored if output
is redirected.
--nopager                     Do not send output through a pager.  Cancels
any setting in ~/.ackrc, ACK_PAGER or
ACK_PAGER_COLOR.
--[no]heading                 Print a filename heading above each file's
results.  (default: on when used interactively)
--[no]break                   Print a break between results from different
files.  (default: on when used interactively)
--group                       Same as --heading --break
--nogroup                     Same as --noheading --nobreak
--[no]color                   Highlight the matching text (default: on unless
output is redirected, or on Windows)
--[no]colour                  Same as --[no]color
--color-filename=COLOR
--color-match=COLOR
--color-lineno=COLOR          Set the color for filenames, matches, and line
numbers.
--flush                       Flush output immediately, even when ack is used
non-interactively (when output goes to a pipe or
file).
File finding:
-f                            Only print the files selected, without
searching.  The PATTERN must not be specified.
-g                            Same as -f, but only select files matching
PATTERN.
--sort-files                  Sort the found files lexically.
--show-types                  Show which types each file has.
--files-from=FILE             Read the list of files to search from FILE.
-x                            Read the list of files to search from STDIN.
File inclusion/exclusion:
--[no]ignore-dir=name         Add/remove directory from list of ignored dirs
--[no]ignore-directory=name   Synonym for ignore-dir
--ignore-file=filter          Add filter for ignoring files
-r, -R, --recurse             Recurse into subdirectories (default: on)
-n, --no-recurse              No descending into subdirectories
--[no]follow                  Follow symlinks.  Default is off.
-k, --known-types             Include only files of types that ack recognizes.
--type=X                      Include only X files, where X is a recognized
filetype.
--type=noX                    Exclude X files.
See "ack --help-types" for supported filetypes.
File type specification:
--type-set TYPE:FILTER:FILTERARGS
Files with the given FILTERARGS applied to the
given FILTER are recognized as being of type
TYPE. This replaces an existing definition for
type TYPE.
--type-add TYPE:FILTER:FILTERARGS
Files with the given FILTERARGS applied to the
given FILTER are recognized as being type TYPE.
--type-del TYPE               Removes all filters associated with TYPE.
Miscellaneous:
--[no]env                     Ignore environment variables and global ackrc
files.  --env is legal but redundant.
--ackrc=filename              Specify an ackrc file to use
--ignore-ack-defaults         Ignore default definitions included with ack.
--create-ackrc                Outputs a default ackrc for your customization
to standard output.
--help, -?                    This help
--help-types                  Display all known types
--dump                        Dump information on which options are loaded
from which RC files
--[no]filter                  Force ack to treat standard input as a pipe
(--filter) or tty (--nofilter)
--man                         Man page
--version                     Display version & copyright
--thpppt                      Bill the Cat
--bar                         The warning admiral
--cathy                       Chocolate! Chocolate! Chocolate!
Exit status is 0 if match, 1 if no match.
This is version 2.12 of ack.
ack's file types (ack --help-types)
Usage: ack [OPTION]... PATTERN [FILES OR DIRECTORIES]
The following is the list of filetypes supported by ack.  You can
specify a file type with the --type=TYPE format, or the --TYPE
format.  For example, both --type=perl and --perl work.
Note that some extensions may appear in multiple types.  For example,
.pod files are both Perl and Parrot.
--[no]actionscript .as .mxml
--[no]ada          .ada .adb .ads
--[no]asm          .asm .s
--[no]asp          .asp
--[no]aspx         .master .ascx .asmx .aspx .svc
--[no]batch        .bat .cmd
--[no]cc           .c .h .xs
--[no]cfmx         .cfc .cfm .cfml
--[no]clojure      .clj
--[no]cmake        CMakeLists.txt; .cmake
--[no]coffeescript .coffee
--[no]cpp          .cpp .cc .cxx .m .hpp .hh .h .hxx
--[no]csharp       .cs
--[no]css          .css
--[no]dart         .dart
--[no]delphi       .pas .int .dfm .nfm .dof .dpk .dproj .groupproj .bdsgroup .bdsproj
--[no]elisp        .el
--[no]elixir       .ex .exs
--[no]erlang       .erl .hrl
--[no]fortran      .f .f77 .f90 .f95 .f03 .for .ftn .fpp
--[no]go           .go
--[no]groovy       .groovy .gtmpl .gpp .grunit .gradle
--[no]haskell      .hs .lhs
--[no]hh           .h
--[no]html         .htm .html
--[no]java         .java .properties
--[no]js           .js
--[no]json         .json
--[no]jsp          .jsp .jspx .jhtm .jhtml
--[no]less         .less
--[no]lisp         .lisp .lsp
--[no]lua          .lua; first line matches /^#!.*\blua(jit)?/
--[no]make         .mk; .mak; makefile; Makefile; GNUmakefile
--[no]matlab       .m
--[no]md           .mkd; .md
--[no]objc         .m .h
--[no]objcpp       .mm .h
--[no]ocaml        .ml .mli
--[no]parrot       .pir .pasm .pmc .ops .pod .pg .tg
--[no]perl         .pl .pm .pod .t .psgi; first line matches /^#!.*\bperl/
--[no]perltest     .t
--[no]php          .php .phpt .php3 .php4 .php5 .phtml; first line matches /^#!.*\bphp/
--[no]plone        .pt .cpt .metadata .cpy .py
--[no]pmc          .pmc
--[no]python       .py; first line matches /^#!.*\bpython/
--[no]rake         Rakefile
--[no]rr           .R
--[no]ruby         .rb .rhtml .rjs .rxml .erb .rake .spec; Rakefile; first line matches /^#!.*\bruby/
--[no]rust         .rs
--[no]sass         .sass .scss
--[no]scala        .scala
--[no]scheme       .scm .ss
--[no]shell        .sh .bash .csh .tcsh .ksh .zsh .fish; first line matches /^#!.*\b(?:ba|t?c|k|z|fi)?sh\b/
--[no]smalltalk    .st
--[no]sql          .sql .ctl
--[no]tcl          .tcl .itcl .itk
--[no]tex          .tex .cls .sty
--[no]textile      .textile
--[no]tt           .tt .tt2 .ttml
--[no]vb           .bas .cls .frm .ctl .vb .resx
--[no]verilog      .v .vh .sv
--[no]vhdl         .vhd .vhdl
--[no]vim          .vim
--[no]xml          .xml .dtd .xsl .xslt .ent; first line matches /<[?]xml/
--[no]yaml         .yaml .yml
Articles about ack
Articles from around the web about ack and searching. Let me know if there are any that should be on here.
Better than grep, by Ryan Kulla
2011-09-03, http://rkulla.blogspot.co.at/2011/09/better-than-grep.html
http://beyondgrep.com/documentation/