ack and ackrc command line examples

Example .ackrc

Before using ack, let's get a good configuration going. The file ~/.ackrc contains a set of command line switches that ack will use when running. This annotated config makes it pretty cool.

# 
# Edoceo ~/.ackrc
--break
--color

# I'm tired of grouping
# --noheading

# mg
# --pager=less --long-prompt --no-init --no-lessopen --quiet --quit-if-one-screen --RAW-CONTROL-CHARS --line-numbers

# o
# --pager=less --no-init --no-lessopen --quit-if-one-screen --line-numbers
# --pager=less 

# --pager=less -iqRS

# only search with case sensitivity if there is mixed case
--smart-case

# Sort the files
--sort-files

--type-set=web=.css,.htm,.html,.php,.phtml,.js

Per Directory .ackrc

Usually, ack only checks your ~/.ackrc file for it’s default switches. Per directory ack settings can be enabled by adding this in your environment, maybe via .bash_profile:

export ACKRC=".ackrc"

Now a .ackrc file can be added to any directory to influence behaviour when ack-ing the directory.

Finding Patterns

Here are a bundle of examples of using the tool ack, which is better than grep.

Ack uses PCRE by default, sweet!

~ $ ack '/'

Formatting Outputs

Ack Type Shortcuts

Use these features when looking at large code base and only wanting to search specific files. For example, a webroot with some PHP and 1000s of images will be slow, unless you specify --php option.

ils-server server # ack --help type
Usage: ack [OPTION]... PATTERN [FILES]

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]gentoo       .ebuild .eclass
    --[no]go           .go
    --[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