Difference between revisions of "Ack"

From Christoph's Personal Wiki
Jump to: navigation, search
(Usage)
 
Line 12: Line 12:
 
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 "-".
 
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.
+
Default switches may be specified in ACK_OPTIONS environment variable or an <code>.ackrc</code> file. If you want no dependency on the environment, turn it off with --noenv.
  
 
Example:
 
Example:
Line 24: Line 24:
  
 
===Search output===
 
===Search output===
  --line=NUM            Only print line(s) NUM of each file
+
--line=NUM            Only print line(s) NUM of each file
  -l, --files-with-matches
+
-l, --files-with-matches
                        Only print filenames containing matches
+
                      Only print filenames containing matches
  -L, --files-without-match
+
-L, --files-without-match
                        Only print filenames with no match
+
                      Only print filenames with no match
  -o                    Show only the part of a line matching PATTERN
+
-o                    Show only the part of a line matching PATTERN
                        (turns off text highlighting)
+
                      (turns off text highlighting)
  --passthru            Print all lines, whether matching or not
+
--passthru            Print all lines, whether matching or not
  --output=expr        Output the evaluation of expr for each line
+
--output=expr        Output the evaluation of expr for each line
                        (turns off text highlighting)
+
                      (turns off text highlighting)
  --match PATTERN      Specify PATTERN explicitly.
+
--match PATTERN      Specify PATTERN explicitly.
  -m, --max-count=NUM  Stop searching in each file after NUM matches
+
-m, --max-count=NUM  Stop searching in each file after NUM matches
  -1                    Stop searching after one match of any kind
+
-1                    Stop searching after one match of any kind
  -H, --with-filename  Print the filename for each match
+
-H, --with-filename  Print the filename for each match
  -h, --no-filename    Suppress the prefixing filename on output
+
-h, --no-filename    Suppress the prefixing filename on output
  -c, --count          Show number of lines matching per file
+
-c, --count          Show number of lines matching per file
 
+
-A NUM, --after-context=NUM
  -A NUM, --after-context=NUM
+
                      Print NUM lines of trailing context after matching
                        Print NUM lines of trailing context after matching
+
                      lines.
                        lines.
+
-B NUM, --before-context=NUM
  -B NUM, --before-context=NUM
+
                      Print NUM lines of leading context before matching
                        Print NUM lines of leading context before matching
+
                      lines.
                        lines.
+
-C [NUM], --context[=NUM]
  -C [NUM], --context[=NUM]
+
                      Print NUM lines (default 2) of output context.
                        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.
  --print0              Print null byte as separator between filenames,
+
                        only works with -f, -g, -l, -L or -c.
+
  
 
===File presentation===
 
===File presentation===
  --pager=COMMAND      Pipes all ack output through COMMAND.
+
--pager=COMMAND      Pipes all ack output through COMMAND.
                        Ignored if output is redirected.
+
                      Ignored if output is redirected.
  --nopager            Do not send output through a pager.  Cancels any
+
--nopager            Do not send output through a pager.  Cancels any
                        setting in ~/.ackrc, ACK_PAGER or ACK_PAGER_COLOR.
+
                      setting in ~/.ackrc, ACK_PAGER or ACK_PAGER_COLOR.
  --[no]heading        Print a filename heading above each file's results.
+
--[no]heading        Print a filename heading above each file's results.
                        (default: on when used interactively)
+
                      (default: on when used interactively)
  --[no]break          Print a break between results from different files.
+
--[no]break          Print a break between results from different files.
                        (default: on when used interactively)
+
                      (default: on when used interactively)
  --group              Same as --heading --break
+
--group              Same as --heading --break
  --nogroup            Same as --noheading --nobreak
+
--nogroup            Same as --noheading --nobreak
  --[no]color          Highlight the matching text (default: on unless output is redirected, or on Windows)
+
--[no]color          Highlight the matching text (default: on unless output is redirected, or on Windows)
  --flush              Flush output immediately, even when ack is used
+
--flush              Flush output immediately, even when ack is used
                        non-interactively (when output goes to a pipe or file).
+
                      non-interactively (when output goes to a pipe or file).
  
 
===File finding===
 
===File finding===
  -f                    Only print the files found, without searching.
+
-f                    Only print the files found, without searching.
                        The PATTERN must not be specified.
+
                      The PATTERN must not be specified.
  -g REGEX              Same as -f, but only print files matching REGEX.
+
-g REGEX              Same as -f, but only print files matching REGEX.
  --sort-files          Sort the found files lexically.
+
--sort-files          Sort the found files lexically.
  
 
===File inclusion/exclusion===
 
===File inclusion/exclusion===
  -a, --all-types      All file types searched;
+
-a, --all-types      All file types searched;
                        Ignores CVS, .svn and other ignored directories
+
                      Ignores CVS, .svn and other ignored directories
  -u, --unrestricted    All files and directories searched
+
-u, --unrestricted    All files and directories searched
  --[no]ignore-dir=name Add/Remove directory from the list of ignored dirs
+
--[no]ignore-dir=name Add/Remove directory from the list of ignored dirs
  -n                    No descending into subdirectories
+
-n                    No descending into subdirectories
  -G REGEX              Only search files that match REGEX
+
-G REGEX              Only search files that match REGEX
  --perl                Include only Perl files.
+
--perl                Include only Perl files.
  --type=perl          Include only Perl files.
+
--type=perl          Include only Perl files.
  --noperl              Exclude Perl files.
+
--noperl              Exclude Perl files.
  --type=noperl        Exclude Perl files.
+
--type=noperl        Exclude Perl files.
                        See "ack --help type" for supported filetypes.
+
                      See "ack --help type" for supported filetypes.
  --type-add TYPE=.EXTENSION[,.EXT2[,...]]
+
--type-add TYPE=.EXTENSION[,.EXT2[,...]]
                        Files with the given EXTENSION(s) are recognized as
+
                      Files with the given EXTENSION(s) are recognized as
                        being of (the existing) type TYPE
+
                      being of (the existing) type TYPE
  --type-set TYPE=.EXTENSION[,.EXT2[,...]]
+
--type-set TYPE=.EXTENSION[,.EXT2[,...]]
                        Files with the given EXTENSION(s) are recognized as
+
                      Files with the given EXTENSION(s) are recognized as
                        being of type TYPE. This replaces an existing
+
                      being of type TYPE. This replaces an existing
                        definition for type TYPE.
+
                      definition for type TYPE.
  --[no]follow          Follow symlinks.  Default is off.
+
--[no]follow          Follow symlinks.  Default is off.
 
+
  Directories ignored by default:
+
Directories ignored by default:
    autom4te.cache, blib, _build, .bzr, .cdv, cover_db, CVS, _darcs, ~.dep,
+
  autom4te.cache, blib, _build, .bzr, .cdv, cover_db, CVS, _darcs, ~.dep,
    ~.dot, .git, .hg, ~.nib, .pc, ~.plst, RCS, SCCS, _sgbak and .svn
+
  ~.dot, .git, .hg, ~.nib, .pc, ~.plst, RCS, SCCS, _sgbak and .svn
 
+
  Files not checked for type:
+
Files not checked for type:
    /~$/          - Unix backup files
+
  /~$/          - Unix backup files
    /#.+#$/        - Emacs swap files
+
  /#.+#$/        - Emacs swap files
    /[._].*\.swp$/ - Vi(m) swap files
+
  /[._].*\.swp$/ - Vi(m) swap files
    /core\.\d+$/  - core dumps
+
  /core\.\d+$/  - core dumps
  
 
===Miscellaneous===
 
===Miscellaneous===
  --noenv              Ignore environment variables and ~/.ackrc
+
--noenv              Ignore environment variables and ~/.ackrc
  --help                This help
+
--help                This help
  --man                Man page
+
--man                Man page
  --version            Display version & copyright
+
--version            Display version & copyright
  --thpppt              Bill the Cat
+
--thpppt              Bill the Cat
  
 
===Filetypes===
 
===Filetypes===
Line 118: Line 116:
 
Note that some extensions may appear in multiple types. For example, .pod files are both Perl and Parrot.
 
Note that some extensions may appear in multiple types. For example, .pod files are both Perl and Parrot.
  
    --[no]actionscript .as .mxml
+
--[no]actionscript .as .mxml
    --[no]asm          .asm .s
+
--[no]ada          .ada .adb .ads
    --[no]batch        .bat .cmd
+
--[no]asm          .asm .s
    --[no]binary      Binary files, as defined by Perl's -B op (default: off)
+
--[no]batch        .bat .cmd
    --[no]cc          .c .h .xs
+
--[no]binary      Binary files, as defined by Perl's -B op (default: off)
    --[no]cfmx        .cfc .cfm .cfml
+
--[no]cc          .c .h .xs
    --[no]cpp          .cpp .cc .cxx .m .hpp .hh .h .hxx
+
--[no]cfmx        .cfc .cfm .cfml
    --[no]csharp      .cs
+
--[no]clojure      .clj
    --[no]css          .css
+
--[no]cpp          .cpp .cc .cxx .m .hpp .hh .h .hxx
    --[no]elisp        .el
+
--[no]csharp      .cs
    --[no]erlang      .erl
+
--[no]css          .css
    --[no]fortran      .f .f77 .f90 .f95 .f03 .for .ftn .fpp
+
--[no]delphi      .pas .int .dfm .nfm .dof .dpk .dproj .groupproj .bdsgroup .bdsproj
    --[no]haskell      .hs .lhs
+
--[no]elisp        .el
    --[no]hh          .h
+
--[no]erlang      .erl .hrl
    --[no]html        .htm .html .shtml .xhtml
+
--[no]fortran      .f .f77 .f90 .f95 .f03 .for .ftn .fpp
    --[no]java        .java .properties
+
--[no]go          .go
    --[no]js          .js
+
--[no]groovy      .groovy .gtmpl .gpp .grunit
    --[no]jsp          .jsp .jspx .jhtm .jhtml
+
--[no]haskell      .hs .lhs
    --[no]lisp        .lisp .lsp
+
--[no]hh          .h
    --[no]lua          .lua
+
--[no]html        .htm .html .shtml .xhtml
    --[no]make        Makefiles
+
--[no]java        .java .properties
    --[no]mason        .mas .mhtml .mpl .mtxt
+
--[no]js          .js
    --[no]objc        .m .h
+
--[no]jsp          .jsp .jspx .jhtm .jhtml
    --[no]objcpp      .mm .h
+
--[no]lisp        .lisp .lsp
    --[no]ocaml        .ml .mli
+
--[no]lua          .lua
    --[no]parrot      .pir .pasm .pmc .ops .pod .pg .tg
+
--[no]make        Makefiles (including *.mk and *.mak)
    --[no]perl        .pl .pm .pod .t
+
--[no]mason        .mas .mhtml .mpl .mtxt
    --[no]php          .php .phpt .php3 .php4 .php5
+
--[no]objc        .m .h
    --[no]plone        .pt .cpt .metadata .cpy .py
+
--[no]objcpp      .mm .h
    --[no]python      .py
+
--[no]ocaml        .ml .mli
    --[no]ruby        .rb .rhtml .rjs .rxml .erb
+
--[no]parrot      .pir .pasm .pmc .ops .pod .pg .tg
    --[no]scheme      .scm
+
--[no]perl        .pl .pm .pod .t
    --[no]shell        .sh .bash .csh .tcsh .ksh .zsh
+
--[no]php          .php .phpt .php3 .php4 .php5 .phtml
    --[no]skipped      Files, but not directories, normally skipped by ack (default: off)
+
--[no]plone        .pt .cpt .metadata .cpy .py
    --[no]smalltalk    .st
+
--[no]python      .py
    --[no]sql          .sql .ctl
+
--[no]rake        Rakefiles
    --[no]tcl          .tcl .itcl .itk
+
--[no]ruby        .rb .rhtml .rjs .rxml .erb .rake .spec
    --[no]tex          .tex .cls .sty
+
--[no]scala        .scala
    --[no]text        Text files, as defined by Perl's -T op (default: off)
+
--[no]scheme      .scm .ss
    --[no]tt          .tt .tt2 .ttml
+
--[no]shell        .sh .bash .csh .tcsh .ksh .zsh
    --[no]vb          .bas .cls .frm .ctl .vb .resx
+
--[no]skipped      Files, but not directories, normally skipped by ack (default: off)
    --[no]vim          .vim
+
--[no]smalltalk    .st
    --[no]xml          .xml .dtd .xslt .ent
+
--[no]sql          .sql .ctl
    --[no]yaml        .yaml .yml
+
--[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==
 
==External links==
*[http://petdance.com/ack/ official website]
+
*[http://betterthangrep.com/ official website]
 
*[http://blog.i-no.de/archives/2008/05/06/index.html ack examples]
 
*[http://blog.i-no.de/archives/2008/05/06/index.html ack examples]
 +
*[http://stevengharms.com/blog/2012/04/10/use-ack-instead-of-grep-to-parse-text-files/ Use Ack Instead of Grep to Parse Text Files] &mdash; by Steven Harms
  
 
[[Category:Linux Command Line Tools]]
 
[[Category:Linux Command Line Tools]]

Latest revision as of 00:03, 16 December 2012

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