Ack

From Christoph's Personal Wiki
Revision as of 00:03, 16 December 2012 by Christoph (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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.

Usage

Note: Taken directly from the official website.

  • Syntax:
ack [OPTION]... PATTERN [FILES]
  • 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.

Example:

ack -i select

Searching

-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
                      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.

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,
  ~.dot, .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

Miscellaneous

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

Filetypes

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