From Christoph's Personal Wiki
Jump to: navigation, search

ack is a tool like grep, aimed at programmers with large trees of heterogeneous source code. ack is written purely in Perl, and takes advantage of the power of Perl's regular expressions.


Note: Taken directly from the official website.

  • Syntax:
  • Help:
ack --help

Search for PATTERN in each source file in the tree from cwd on down. If [FILES] is specified, then only those files/directories are checked. ack may also search STDIN, but only if no FILES are specified, or if one of FILES 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.


ack -i select


-i, --ignore-case 
Ignore case distinctions in PATTERN
-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

--line=NUM            Only print line(s) NUM of each file
-l, --files-with-matches
                      Only print filenames containing matches
-L, --files-without-match
                      Only print filenames with no match
-o                    Show only the part of a line matching PATTERN
                      (turns off text highlighting)
--passthru            Print all lines, whether matching or not
--output=expr         Output the evaluation of expr for each line
                      (turns off text highlighting)
--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
-h, --no-filename     Suppress the prefixing filename on output
-c, --count           Show number of lines matching per file
-A NUM, --after-context=NUM
                      Print NUM lines of trailing context after matching
-B NUM, --before-context=NUM
                      Print NUM lines of leading context before matching
-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.

File presentation

--pager=COMMAND       Pipes all ack output through COMMAND.
                      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)
--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 found, without searching.
                      The PATTERN must not be specified.
-g REGEX              Same as -f, but only print files matching REGEX.
--sort-files          Sort the found files lexically.

File inclusion/exclusion

-a, --all-types       All file types searched;
                      Ignores CVS, .svn and other ignored directories
-u, --unrestricted    All files and directories searched
--[no]ignore-dir=name Add/Remove directory from the list of ignored dirs
-n                    No descending into subdirectories
-G REGEX              Only search files that match REGEX
--perl                Include only Perl files.
--type=perl           Include only Perl files.
--noperl              Exclude Perl files.
--type=noperl         Exclude Perl files.
                      See "ack --help type" for supported filetypes.
--type-add TYPE=.EXTENSION[,.EXT2[,...]]
                      Files with the given EXTENSION(s) are recognized as
                      being of (the existing) type TYPE
--type-set TYPE=.EXTENSION[,.EXT2[,...]]
                      Files with the given EXTENSION(s) are recognized as
                      being of type TYPE. This replaces an existing
                      definition for type TYPE.
--[no]follow          Follow symlinks.  Default is off.

Directories ignored by default:
  autom4te.cache, blib, _build, .bzr, .cdv, cover_db, CVS, _darcs, ~.dep,, .git, .hg, ~.nib, .pc, ~.plst, RCS, SCCS, _sgbak and .svn

Files not checked for type:
  /~$/           - Unix backup files
  /#.+#$/        - Emacs swap files
  /[._].*\.swp$/ - Vi(m) swap files
  /core\.\d+$/   - core dumps


--noenv               Ignore environment variables and ~/.ackrc
--help                This help
--man                 Man page
--version             Display version & copyright
--thpppt              Bill the Cat


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]batch        .bat .cmd
--[no]binary       Binary files, as defined by Perl's -B op (default: off)
--[no]cc           .c .h .xs
--[no]cfmx         .cfc .cfm .cfml
--[no]clojure      .clj
--[no]cpp          .cpp .cc .cxx .m .hpp .hh .h .hxx
--[no]csharp       .cs
--[no]css          .css
--[no]delphi       .pas .int .dfm .nfm .dof .dpk .dproj .groupproj .bdsgroup .bdsproj
--[no]elisp        .el
--[no]erlang       .erl .hrl
--[no]fortran      .f .f77 .f90 .f95 .f03 .for .ftn .fpp
--[no]go           .go
--[no]groovy       .groovy .gtmpl .gpp .grunit
--[no]haskell      .hs .lhs
--[no]hh           .h
--[no]html         .htm .html .shtml .xhtml
--[no]java         .java .properties
--[no]js           .js
--[no]jsp          .jsp .jspx .jhtm .jhtml
--[no]lisp         .lisp .lsp
--[no]lua          .lua
--[no]make         Makefiles (including *.mk and *.mak)
--[no]mason        .mas .mhtml .mpl .mtxt
--[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
--[no]php          .php .phpt .php3 .php4 .php5 .phtml
--[no]plone        .pt .cpt .metadata .cpy .py
--[no]python       .py
--[no]rake         Rakefiles
--[no]ruby         .rb .rhtml .rjs .rxml .erb .rake .spec
--[no]scala        .scala
--[no]scheme       .scm .ss
--[no]shell        .sh .bash .csh .tcsh .ksh .zsh
--[no]skipped      Files, but not directories, normally skipped by ack (default: off)
--[no]smalltalk    .st
--[no]sql          .sql .ctl
--[no]tcl          .tcl .itcl .itk
--[no]tex          .tex .cls .sty
--[no]text         Text files, as defined by Perl's -T op (default: off)
--[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
--[no]yaml         .yaml .yml

External links