Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
UGREP(1)			  User Commands 			UGREP(1)

NAME
     ugrep, ug -- file pattern searcher

SYNOPSIS
     ugrep [OPTIONS] [-i|-j] [-Q|PATTERN] [-e PATTERN] [-N PATTERN] [-f FILE]
	   [-E|-F|-G|-P|-Z] [-U] [-m [MIN,][MAX]] [--bool [--files|--lines]]
	   [-r|-R|-1|...|-9|-10|-11|...] [-t TYPES] [-g GLOBS] [--sort[=KEY]]
	   [-q|-l|-c|-o] [-v] [-n] [-k] [-b] [-A NUM] [-B NUM] [-C NUM] [-y]
	   [--color[=WHEN]|--colour[=WHEN]] [--pretty] [--pager[=COMMAND]]
	   [--hexdump|--csv|--json|--xml] [-I] [-z] [--zmax=NUM] [FILE ...]

DESCRIPTION
     The ugrep utility searches any given input files, selecting files and lines
     that  match  one  or  more  patterns specified as regular expressions or as
     fixed strings.  A pattern matches multiple input lines when  the  pattern's
     regular  expression matches one or more newlines.	An empty pattern matches
     every line.  Each input line that matches at least one of the  patterns  is
     written to the standard output.

     The ug command is intended for interactive searching, using a `.ugrep' con-
     figuration  file  located in the working directory or, if not found, in the
     home directory, see CONFIGURATION.  ug  is  equivalent  to  ugrep	--config
     --pretty  --sort to load a configuration file, enhance the terminal output,
     and to sort files by name.

     The ugrep+ and ug+ commands are the same as the ugrep and ug commands,  but
     also  use	filters  to search pdfs, documents, e-books, and image metadata,
     when the corresponding filter tools are installed.

     A list of matching files is produced with option -l (--files-with-matches).
     Option -c (--count) counts the number of  matching  lines.   When	combined
     with option -o, counts the total number of matches.  When combined with op-
     tion -m1, (--min-count=1), skips files with zero matches.

     The  default  pattern  syntax  is an extended form of the POSIX ERE syntax,
     same as option -E (--extended-regexp).  Try ug --help regex for  help  with
     pattern syntax and how to use logical connectives to specify Boolean search
     queries  with option -% (--bool) to match lines and -%% (--bool --files) to
     match files.  Options -F  (--fixed-strings),  -G  (--basic-regexp)  and  -P
     (--perl-regexp) specify other pattern syntaxes.

     Option  -i  (--ignore-case)  ignores  letter  case  in patterns.  Option -j
     (--smart-case) enables -i only if the  search  patterns  are  specified  in
     lower case.

     Fuzzy  (approximate)  search  is specified with option -Z (--fuzzy) with an
     optional argument to control character insertions, deletions,  and/or  sub-
     stitutions.  Try ug --help fuzzy for help with fuzzy search.

     Note  that  pattern  `.'  matches	any non-newline character.  Pattern `\n'
     matches a newline character.  Multiple lines may be matched  with	patterns
     that match one or more newline characters.

     The  empty  pattern "" matches all lines.	Other empty-matching patterns do
     not.  For example, the pattern `a*' will match one or more a's.  Option  -Y
     forces empty matches for compatibility with other grep tools.

     Option -f FILE matches patterns specified in FILE.

     By  default  Unicode patterns are matched.  Option -U (--ascii or --binary)
     disables Unicode matching for ASCII and binary pattern matching.	Non-Uni-
     code matching is more efficient.

     ugrep  accepts  input of various encoding formats and normalizes the output
     to UTF-8.	When a UTF byte order mark is present in the input, the input is
     automatically normalized.	An input encoding format may be  specified  with
     option --encoding.

     If no FILE arguments are specified and standard input is read from a termi-
     nal,  recursive  searches	are  performed	as if -r is specified.	To force
     reading from standard input, specify `-' as a FILE argument.

     Directories specified as FILE  arguments  are  searched  without  recursing
     deeper  into  subdirectories,  unless  -R,  -r,  or -2...-9 is specified to
     search subdirectories recursively (up to the specified depth.)

     Option -I (--ignore-binary) ignores binary files.	A binary file is a  file
     with non-text content.  A file with zero bytes or invalid UTF formatting is
     considered binary.

     Hidden  files and directories are ignored in recursive searches.  Option -.
     (--hidden) includes hidden files and directories in recursive searches.

     To match the names of files to search and the names of directories  to  re-
     curse,  one  or  more of the following options may be specified.  Option -O
     specifies one or more filename extensions to match.   Option  -t  specifies
     one or more file types to search (-t list outputs a list of types.)  Option
     -g  specifies  a  gitignore-style	glob pattern to match filenames.  Option
     --ignore-files specifies a file with gitignore-style globs to ignore direc-
     tories and files.	Try ug --help globs for help with filename and directory
     name matching.  See also section GLOBBING.

     Compressed files and archives are searched with option  -z  (--decompress).
     When used with option --zmax=NUM, searches the contents of compressed files
     and archives stored within archives up to NUM levels.

     Output  to  a  terminal for viewing is enhanced with --pretty, which is en-
     abled by default with the ug command.

     A query terminal user interface (TUI) is opened with -Q (--query) to inter-
     actively specify search patterns and view search results.	A PATTERN  argu-
     ment requires -e PATTERN to start the query TUI with the specified pattern.

     A	terminal  output  pager is enabled with --pager that accepts an optional
     COMMAND to view the output.

     Customized output is produced with option --format or  --replace.	 Try  ug
     --help format for help with custom formatting of the output.  See also sec-
     tion  FORMAT.   Predefined formats include CSV with option --csv, JSON with
     option --json, and XML with option --xml.	Hexdumps are output with  option
     -X (--hex) or with option --hexdump to customize hexdumps.

     A	`--' signals the end of options; the rest of the parameters are FILE ar-
     guments, allowing filenames to begin with a `-' character.

     Long options may start with `--no-' to disable, when applicable.

     ug --help WHAT displays help on options related to WHAT.

     The following options are available:

     -A NUM, --after-context=NUM
	    Output NUM lines of trailing context after matching lines.	Places a
	    --group-separator between contiguous groups of matches.   If  -o  is
	    specified,	output	the  match with context to fit NUM columns after
	    the match or shortens the match.  See also options -B, -C and -y.

     -a, --text
	    Process a binary file as if it were text.  This is equivalent to the
	    --binary-files=text option.  This option might output binary garbage
	    to the terminal, which can have problematic consequences if the ter-
	    minal driver interprets some of it as terminal commands.

     --all, -@
	    Search all files except hidden: cancel previous file  and  directory
	    search  restrictions  and  cancel --ignore-binary and --ignore-files
	    when specified.  Restrictions specified after this option,	i.e.  to
	    the right, are still applied.  For example, -@I searches all non-bi-
	    nary  files and -@. searches all files including hidden files.  Note
	    that hidden files and directories are never searched, unless  option
	    -. or --hidden is specified.

     --and [-e] PATTERN
	    Specify  additional  PATTERN that must match.  Additional -e PATTERN
	    following this option is considered an alternative pattern to match,
	    i.e. each -e is interpreted as an OR  pattern  enclosed  within  the
	    AND.  For example, -e A -e B --and -e C -e D matches lines with (`A'
	    or	`B') and (`C' or `D').	Note that multiple -e PATTERN are alter-
	    nations that bind more tightly together than --and.  Option  --stats
	    displays  the  search  patterns  applied.	See  also options --not,
	    --andnot, --bool, --files and --lines.

     --andnot [-e] PATTERN
	    Combines --and --not.  See also options --and, --not and --bool.

     -B NUM, --before-context=NUM
	    Output NUM lines of leading context before matching lines.	Places a
	    --group-separator between contiguous groups of matches.   If  -o  is
	    specified,	output	the match with context to fit NUM columns before
	    the match or shortens the match.  See also options -A, -C and -y.

     -b, --byte-offset
	    The offset in bytes of a pattern match is displayed in front of  the
	    respective	matched  line.	 When -u or --ungroup is specified, dis-
	    plays the offset for each pattern matched on the  same  line.   Byte
	    offsets are exact for ASCII, UTF-8 and raw binary input.  Otherwise,
	    the offset in the UTF-8-normalized input is displayed.

     --binary-files=TYPE
	    Controls  searching  and  reporting pattern matches in binary files.
	    TYPE can be `binary', `without-match`, `text`, `hex` and `with-hex'.
	    The default is `binary' to search binary files and to report a match
	    without  displaying  the  match.   `without-match'	ignores   binary
	    matches.  `text' treats all binary files as text, which might output
	    binary  garbage  to  the terminal, which can have problematic conse-
	    quences if the terminal driver interprets some of  it  as  commands.
	    `hex'  reports  all matches in hexadecimal.  `with-hex' only reports
	    binary matches in hexadecimal, leaving text  matches  alone.   Files
	    having NUL (zero) bytes are binary and files with invalid UTF encod-
	    ing are binary unless option -U or --ascii or --binary is specified.
	    Short options are -a, -I, -W, -X.

     --bool, -%, -%%
	    Specifies  Boolean	query patterns.  A Boolean query pattern is com-
	    posed of `AND', `OR', `NOT' operators and  grouping  with  `('  `)'.
	    Spacing between subpatterns is the same as `AND', `|' is the same as
	    `OR'  and  a `-' is the same as `NOT'.  The `OR' operator binds more
	    tightly than `AND'.  For example, --bool  'A|B  C|D'  matches  lines
	    with (`A' or `B') and (`C' or `D'), --bool 'A -B' matches lines with
	    `A'  and not `B'.  Operators `AND', `OR', `NOT' require proper spac-
	    ing.  For example, --bool 'A OR B AND C OR	D'  matches  lines  with
	    (`A'  or  `B')  and (`C' or `D'), --bool 'A AND NOT B' matches lines
	    with `A' without `B'.  Quoted subpatterns are matched  literally  as
	    strings.   For example, --bool 'A "AND"|"OR"' matches lines with `A'
	    and also either `AND' or `OR'.  Parentheses are used  for  grouping.
	    For  example,  --bool  '(A	B)|C' matches lines with `A' and `B', or
	    lines with `C'.  Note that all subpatterns in a Boolean  query  pat-
	    tern  are  regular expressions, unless -F is specified.  Options -E,
	    -F, -G, -P and -Z can be combined with --bool to  match  subpatterns
	    as	strings or regular expressions (-E is the default.)  This option
	    does not apply to -f FILE patterns.  The double short option -%% en-
	    ables options --bool --files.  Option --stats displays  the  Boolean
	    search  patterns  applied.	See also options --and, --andnot, --not,
	    --files and --lines.

     --break
	    Adds a line break between results from different files.  This option
	    is enabled by --heading.

     -C NUM, --context=NUM
	    Output NUM lines of leading and trailing  context  surrounding  each
	    matching line.  Places a --group-separator between contiguous groups
	    of	matches.   If  -o is specified, output the match with context to
	    fit NUM columns before and after the match or  shortens  the  match.
	    See also options -A, -B and -y.

     -c, --count
	    Only  a count of selected lines is written to standard output.  When
	    -o or -u is specified, counts the number of patterns matched.   When
	    -v is specified, counts the number of non-matching lines.  When -m1,
	    (with  a  comma or --min-count=1) is specified, counts only matching
	    files without outputting zero matches.

     --color[=WHEN], --colour[=WHEN]
	    Mark up the matching text with  the  colors  specified  with  option
	    --colors  or  the  GREP_COLOR  or  GREP_COLORS environment variable.
	    WHEN can be `never', `always', or  `auto',	where  `auto'  marks  up
	    matches only when output on a terminal.  The default is `auto'.

     --colors=COLORS, --colours=COLORS
	    Use COLORS to mark up text.  COLORS is a colon-separated list of one
	    or	more  parameters  `sl='  (selected  line), `cx=' (context line),
	    `mt=' (matched text), `ms=' (match selected), `mc=' (match context),
	    `fn=' (file name), `ln=' (line number), `cn=' (column number), `bn='
	    (byte offset), `se=' (separator), `qp=' (TUI prompt), `qe=' (TUI er-
	    rors), `qr=' (TUI regex), `qm=' (TUI regex meta  characters),  `ql='
	    (TUI regex lists and literals), `qb=' (TUI regex braces).  Parameter
	    values  are  ANSI  SGR  color  codes  or `k' (black), `r' (red), `g'
	    (green), `y' (yellow), `b' (blue), `m' (magenta),  `c'  (cyan),  `w'
	    (white),  or  leave  empty for no color.  Upper case specifies back-
	    ground colors.  A `+' qualifies a color as bright.	A foreground and
	    a background color may be combined with font  properties  `n'  (nor-
	    mal),  `f'	(faint), `h' (highlight), `i' (invert), `u' (underline).
	    Parameter `hl' enables file name  hyperlinks.   Parameter  `rv'  re-
	    verses  the  `sl=' and `cx=' parameters when option -v is specified.
	    Selectively overrides GREP_COLORS.	 Legacy  grep  single  parameter
	    codes  may	be specified, for example --colors='7;32' or --colors=ig
	    to set ms (match selected).

     --config[=FILE], ---[FILE]
	    Use configuration FILE.  The default FILE is `.ugrep'.  The  working
	    directory  is  checked first for FILE, then the home directory.  The
	    options specified in the configuration FILE are parsed  first,  fol-
	    lowed  by  the remaining options specified on the command line.  The
	    ug command automatically loads a `.ugrep'  configuration  file  when
	    present, unless --config=FILE or --no-config is specified.

     --no-config
	    Do not automatically load the default .ugrep configuration file.

     --no-confirm
	    Do not confirm actions in -Q query TUI.  The default is confirm.

     --cpp  Output file matches in C++.  See also options --format and -u.

     --csv  Output  file  matches  in CSV.  When -H, -n, -k, or -b is specified,
	    additional values are output.  See also options --format and -u.

     -D ACTION, --devices=ACTION
	    If an input file is a device, FIFO or socket, use ACTION to  process
	    it.   When	ACTION	is  `skip', devices are ignored.  When ACTION is
	    `read', devices are read just as if they were ordinary  files.   The
	    default  ACTION is `skip', except for devices specified as arguments
	    on the command line, which can be explicitly skipped with -Dskip.

     -d ACTION, --directories=ACTION
	    If an input file is a directory, use ACTION to process it.	When AC-
	    TION is `read', warn when directories are read as input.   When  AC-
	    TION is `recurse', read all files under each directory, recursively,
	    following symbolic links only if they are on the command line.  This
	    is	equivalent  to	the  -r option.  When ACTION is `dereference-re-
	    curse', read all files under each directory, recursively,  following
	    symbolic links.  This is equivalent to the -R option.  When no files
	    or directories are specified on the command line, ACTION defaults to
	    `recurse` or option -r.

     --delay=DELAY
	    Set the default -Q key response delay.  Default is 3 for 300ms.

     --depth=[MIN,][MAX], -1, -2, -3, ... -9, -10, -11, ...
	    Restrict  recursive  searches from MIN to MAX directory levels deep,
	    where -1 (--depth=1) searches the specified path  without  recursing
	    into  subdirectories.  The short forms -3 -5, -3-5 and -3,5 search 3
	    to 5 levels deep.  Enables -r if -R or -r is not specified.

     --dotall
	    Dot `.' in regular expressions matches anything, including	newline.
	    Note that `.*' matches all input and should not be used.

     -E, --extended-regexp
	    Interpret  patterns  as extended regular expressions (EREs). This is
	    the default.

     -e PATTERN, --regexp=PATTERN
	    Specify a PATTERN to search the input.  An input line is selected if
	    it matches any of the specified patterns.	This  option  is  useful
	    when  multiple  -e options are used to specify multiple patterns, or
	    when a pattern starts with a dash (`-'), or to specify a pattern af-
	    ter option -f or after the FILE arguments.

     --encoding=ENCODING
	    The encoding format of the input.  The default ENCODING is binary or
	    UTF-8 which are treated the same.  Therefore, --encoding=binary  has
	    no effect.	Contrast this with option -U or --ascii or --binary that
	    specifies  raw  binary PATTERN matching.  ENCODING can be: `binary',
	    `ASCII',  `UTF-8',	`UTF-16',  `UTF-16BE',	 `UTF-16LE',   `UTF-32',
	    `UTF-32BE',   `UTF-32LE',	`LATIN1',   `ISO-8859-1',  `ISO-8859-2',
	    `ISO-8859-3',     `ISO-8859-4',	`ISO-8859-5',	   `ISO-8859-6',
	    `ISO-8859-7',     `ISO-8859-8',	`ISO-8859-9',	  `ISO-8859-10',
	    `ISO-8859-11',    `ISO-8859-13',	`ISO-8859-14',	  `ISO-8859-15',
	    `ISO-8859-16',   `MAC',   `MACROMAN',  `EBCDIC',  `CP437',	`CP850',
	    `CP858', `CP1250', `CP1251', `CP1252', `CP1253', `CP1254', `CP1255',
	    `CP1256',  `CP1257',  `CP1258',   `KOI8-R',   `KOI8-U',   `KOI8-RU',
	    `null-data'.

     --exclude=GLOB
	    Exclude  files  whose name matches GLOB, same as -g ^GLOB.	GLOB can
	    use **, *, ?, and [...] as wildcards and \ to quote  a  wildcard  or
	    backslash character literally.  When GLOB contains a `/', full path-
	    names are matched.	Otherwise basenames are matched.  When GLOB ends
	    with  a  `/', directories are excluded as if --exclude-dir is speci-
	    fied.  Otherwise files are excluded.  Note that  --exclude	patterns
	    take  priority  over  --include  patterns.	GLOB should be quoted to
	    prevent shell globbing.  This option may be repeated.

     --exclude-dir=GLOB
	    Exclude directories whose name matches GLOB from recursive searches,
	    same as -g ^GLOB/.	GLOB may use **, *, ?, and  [...]  as  wildcards
	    and  \  to	quote a wildcard or backslash character literally.  When
	    GLOB contains a `/', full pathnames are  matched.	Otherwise  base-
	    names  are	matched.  Note that --exclude-dir patterns take priority
	    over --include-dir patterns.  GLOB should be quoted to prevent shell
	    globbing.  This option may be repeated.

     --exclude-from=FILE
	    Read the globs from FILE and skip files and directories  whose  name
	    matches  one  or  more globs.  A glob may use **, *, ?, and [...] as
	    wildcards and \ to quote a wildcard or  backslash  character  liter-
	    ally.  When a glob contains a `/', full pathnames are matched.  Oth-
	    erwise basenames are matched.  When a glob ends with a `/', directo-
	    ries are excluded as if --exclude-dir is specified.  Otherwise files
	    are excluded.  A glob starting with a `!' overrides previously-spec-
	    ified exclusions by including matching files.  Lines starting with a
	    `#'  in  FILE  are	ignored.   When FILE is a `-', standard input is
	    read.  This option may be repeated.  See also related  option  --ig-
	    nore-files for subdirectory-specific exclusions.

     --exclude-fs=MOUNTS
	    Exclude  file  systems  specified by MOUNTS from recursive searches.
	    MOUNTS is a comma-separated list of mount points or pathnames to di-
	    rectories.	When MOUNTS is not specified,  only  descends  into  the
	    file systems associated with the specified file and directory search
	    targets,  i.e.  excludes  all  other  file systems.  Note that --ex-
	    clude-fs=MOUNTS take priority over --include-fs=MOUNTS.  This option
	    may be repeated.

     -F, --fixed-strings
	    Interpret pattern as a set of fixed strings, separated by  newlines,
	    any  of  which  is to be matched.  This makes ugrep behave as fgrep.
	    If a PATTERN is specified, or -e PATTERN or -N  PATTERN,  then  this
	    option  has  no effect on -f FILE patterns to allow -f FILE patterns
	    to narrow or widen the scope of the PATTERN search.

     -f FILE, --file=FILE
	    Read newline-separated patterns from FILE.	White space in	patterns
	    is	significant.  Empty lines in FILE are ignored.	If FILE does not
	    exist, the GREP_PATH environment variable is used as path  to  FILE.
	    If	that  fails,  looks for FILE in /usr/local/share/ugrep/patterns.
	    When FILE is a `-', standard input is read.  Empty files contain  no
	    patterns; thus nothing is matched.	This option may be repeated.

     --files, -%%
	    Boolean  file matching mode, the opposite of --lines.  When combined
	    with option --bool, matches a file if  all	Boolean  conditions  are
	    satisfied.	For example, --bool --files 'A B|C -D' matches a file if
	    some lines match `A', and some lines match either `B' or `C', and no
	    line  matches  `D'.  See also options --and, --andnot, --not, --bool
	    and --lines.  The double short option  -%%	enables  options  --bool
	    --files.

     --filter=COMMANDS
	    Filter  files through the specified COMMANDS first before searching.
	    COMMANDS is a  comma-separated  list  of  `exts:command  arguments',
	    where  `exts'  is  a comma-separated list of filename extensions and
	    `command' is a filter utility.  Files matching  one  of  `exts'  are
	    filtered.	A `*' matches any file.  The specified `command' may in-
	    clude arguments separated by spaces.  An argument may be  quoted  to
	    include  spacing,  commas or a `%'.  A `%' argument expands into the
	    pathname to  search.   For	example,  --filter='pdf:pdftotext  %  -'
	    searches PDF files.  The `%' expands into a `-' when searching stan-
	    dard  input.  When a `%' is not specified, the filter command should
	    read from standard input and write to standard output.  Option --la-
	    bel=.ext may be used to specify extension `ext' when searching stan-
	    dard input.  Note that `exts` filename extension  matching	is  case
	    insensitive.  This option may be repeated.

     --filter-magic-label=[+]LABEL:MAGIC
	    Associate  LABEL  with files whose signature "magic bytes" match the
	    MAGIC regex pattern.  Only files that have no filename extension are
	    labeled, unless +LABEL is specified.  When LABEL matches  an  exten-
	    sion  specified  in  --filter=COMMANDS, the corresponding command is
	    invoked.  This option may be repeated.

     --format=FORMAT
	    Output FORMAT-formatted matches.  For example  --format='%f:%n:%O%~'
	    outputs  matching lines `%O' with filename `%f` and line number `%n'
	    followed by a newline `%~'.  If -P is specified, FORMAT may  include
	    `%1'  to `%9', `%[NUM]#' and `%[NAME]#' to output group captures.  A
	    `%%' outputs `%'.  See `ugrep --help format' and `man ugrep' section
	    FORMAT for details.  When option -o is specified, option -u is  also
	    enabled.  Context options -A, -B, -C and -y are ignored.

     --free-space
	    Spacing (blanks and tabs) in regular expressions are ignored.

     --from=FILE
	    Read  additional  pathnames of files to search from FILE.  When FILE
	    is a `-', standard input is read.  This option is useful with `find

     -G, --basic-regexp
	    Interpret patterns as basic regular expressions (BREs).

     -g GLOBS, --glob=GLOBS, --iglob=GLOBS
	    Only search files whose name matches the  specified  comma-separated
	    list  of  GLOBS,  same as --include='glob' for each `glob' in GLOBS.
	    When a `glob' is preceded by a `!' or a `^', skip files  whose  name
	    matches  `glob',  same  as --exclude='glob'.  When `glob' contains a
	    `/', full pathnames are matched and option -r is enabled to  recurse
	    into  directories  if -d, -r or -R is not already specified.  Other-
	    wise basenames are matched.  When `glob' ends with a  `/',	directo-
	    ries   are	 matched,   same   as	--include-dir='glob'  and  --ex-
	    clude-dir='glob'.  A leading `./' or just `/'  matches  the  working
	    directory.	 Option  --iglob=GLOBS	performs  case-insensitive  name
	    matching.  This option may be repeated and may be combined with  op-
	    tions -M, -O and -t.  For more details, see `ugrep --help globs' and
	    `man ugrep' section GLOBBING for details.

     --glob-ignore-case
	    Perform case-insensitive glob matching in general.

     --group-separator[=SEP]
	    Use SEP as a group separator for context options -A, -B and -C.  The
	    default is a double hyphen (`--').

     --no-group-separator
	    Removes the group separator line from the output for context options
	    -A, -B and -C.

     -H, --with-filename
	    Always  print  the	filename with output lines.  This is the default
	    when there is more than one file to search.

     -h, --no-filename
	    Never print filenames with output lines.  This is the  default  when
	    there is only one file (or only standard input) to search.

     --heading, -+
	    Group matches per file.  Adds a heading and a line break between re-
	    sults from different files.  This option is enabled by --pretty when
	    the output is sent to the terminal.

     --help [WHAT], -? [WHAT]
	    Display  a	help  message on options related to WHAT when specified.
	    In addition, `--help regex' displays an overview of regular  expres-
	    sions,  `--help  globs' displays an overview of glob syntax and con-
	    ventions, `--help fuzzy'  displays	details  of  fuzzy  search,  and
	    `--help format' displays a list of option --format=FORMAT fields.

     --hexdump[=[1-8][a][bch][A[NUM]][B[NUM]][C[NUM]]]
	    Output  matches  in 1 to 8 columns of 8 hexadecimal octets.  The de-
	    fault is 2 columns or 16 octets per line.  Argument  `a'  outputs  a
	    `*'  for  all hex lines that are identical to the previous hex line,
	    `b' removes all space breaks, `c' removes the character column,  `h'
	    removes hex spacing, `A' includes up to NUM hex lines after a match,
	    `B'  includes up to NUM hex lines before a match and `C' includes up
	    to NUM hex lines before and after a match.	Arguments `A',	`B'  and
	    `C'  are the same as options -A, -B and -C when used with --hexdump.
	    See also options -U, -W and -X.

     --hidden, -.
	    Search hidden files and directories (enabled by default in grep com-
	    patibility mode).

     --hyperlink[=[PREFIX][+]]
	    Hyperlinks are enabled for file names when colors are enabled.  Same
	    as --colors=hl.  When PREFIX is  specified,  replaces  file://  with
	    PREFIX://  in  the hyperlink.  A `+' includes the line number in the
	    hyperlink and when option -k is specified, the column number.

     -I, --ignore-binary
	    Ignore matches in binary files.  This option is  equivalent  to  the
	    --binary-files=without-match  option.  Files having NUL (zero) bytes
	    are binary.  Also files with invalid UTF encoding are binary  unless
	    option -U or --ascii or --binary is specified.

     -i, --ignore-case
	    Perform case insensitive matching.	By default, ugrep is case sensi-
	    tive.

     --ignore-files[=FILE]
	    Ignore files and directories matching the globs in each FILE that is
	    encountered  in  recursive	searches.   The default FILE is `.gitig-
	    nore'.  Matching files and directories located in the  directory  of
	    the  FILE  and  in	subdirectories are ignored.  When FILE is a full
	    pathname, FILE is read ahead of the recursive search and  globs  are
	    globally  applied  to  ignore files and directories.  When FILE is a
	    `-', standard input is read.  Globbing is  the  same  as  for  --ex-
	    clude-from=FILE,  except that --ignore-files excludes files and also
	    directories when globs match.  This option may be repeated.

     --no-ignore-files
	    Do not ignore files, i.e. cancel --ignore-files when specified.

     --include=GLOB
	    Only search files whose name matches GLOB, same as	-g  GLOB.   GLOB
	    may  use  **, *, ?, and [...] as wildcards and \ to quote a wildcard
	    or backslash character literally.  When GLOB contains  a  `/',  full
	    pathnames  are  matched and option -r is enabled to recurse into di-
	    rectories if -d, -r or -R is not already specified.  Otherwise base-
	    names are matched.	When GLOB ends with a `/', directories	are  in-
	    cluded  as	if  --include-dir is specified.  Otherwise files are in-
	    cluded.  Note that --exclude patterns take priority  over  --include
	    patterns.	GLOB  should  be quoted to prevent shell globbing.  This
	    option may be repeated.

     --include-dir=GLOB
	    Only directories whose name matches GLOB are included  in  recursive
	    searches,  same  as  -g  GLOB/.  GLOB may use **, *, ?, and [...] as
	    wildcards and \ to quote a wildcard or  backslash  character  liter-
	    ally.   When GLOB contains a `/', full pathnames are matched and op-
	    tion -r is enabled to recurse into directories if -d, -r  or  -R  is
	    not  already specified.  Otherwise basenames are matched.  Note that
	    --exclude-dir patterns take priority  over	--include-dir  patterns.
	    GLOB should be quoted to prevent shell globbing.  This option may be
	    repeated.

     --include-from=FILE
	    Read the globs from FILE and search only files and directories whose
	    name  matches one or more globs.  A glob may use **, *, ?, and [...]
	    as wildcards and \ to quote a wildcard or backslash character liter-
	    ally.  When a glob contains a `/', full pathnames are matched.  Oth-
	    erwise basenames are matched.  When a glob ends with a `/', directo-
	    ries are included as if --include-dir is specified.  Otherwise files
	    are included.  A glob starting with a `!' overrides previously-spec-
	    ified inclusions by excluding matching files.  Lines starting with a
	    `#' and empty lines in FILE are ignored.  When FILE is a `-',  stan-
	    dard input is read.  This option may be repeated.

     --include-fs=MOUNTS
	    Only  file	systems  specified  by	MOUNTS are included in recursive
	    searches.  MOUNTS is a comma-separated list of mount points or path-
	    names to directories.  When MOUNTS is not specified,  restricts  re-
	    cursive  searches  to the file system of the working directory, same
	    as --include-fs=. (dot). Note that --exclude-fs=MOUNTS take priority
	    over --include-fs=MOUNTS.  This option may be repeated.

     --index
	    Perform fast index-based recursive search.	This option assumes, but
	    does not require, that files are indexed with  ugrep-indexer.   This
	    option  also  enables  option  -r  or  --recursive.   Skips  indexed
	    non-matching files, archives and compressed files.	Significant  ac-
	    celeration	may be achieved on cold (not file-cached) and large file
	    systems, or any file system that is slow to search.  Note  that  the
	    start-up  time  to	search may be increased when complex search pat-
	    terns are specified that contain  large  Unicode  character  classes
	    combined  with  `*' or `+' repeats, which should be avoided.  Option
	    -U or --ascii or --binary improves performance.  Option --stats dis-
	    plays an index search report.

     -J NUM, --jobs=NUM
	    Specifies the number of threads spawned to search files.  By default
	    an optimum number of threads is spawned to search  files  simultane-
	    ously.  -J1 disables threading: files are searched in the same order
	    as specified.

     -j, --smart-case
	    Perform  case  insensitive	matching,  unless a pattern is specified
	    with a literal upper case letter.

     --json
	    Output file matches in JSON.  When -H, -n, -k, or -b  is  specified,
	    additional values are output.  See also options --format and -u.

     -K [MIN,][MAX], --range=[MIN,][MAX], --min-line=MIN, --max-line=MAX
	    Start searching at line MIN, stop reading input after line MAX.

     -k, --column-number
	    The  column  number  of a pattern match is displayed in front of the
	    respective matched line, starting at column 1.  Tabs are expanded in
	    counting columns, see also option --tabs.

     -L, --files-without-match
	    Only the names of files not containing selected lines are written to
	    standard output.  Pathnames are listed once per file  searched.   If
	    the  standard  input is searched, the string ``(standard input)'' is
	    written.

     -l, --files-with-matches
	    Only the names of files containing selected  lines	are  written  to
	    standard  output.	Pathnames are listed once per file searched.  If
	    the standard input is searched, the string ``(standard  input)''  is
	    written.  Stop reading input upon the first match.

     --label=LABEL
	    Displays  the  LABEL  value  when  input is read from standard input
	    where a file name would normally be printed in  the  output.   Asso-
	    ciates  a  filename  extension  with standard input when LABEL has a
	    suffix.  The default value is `(standard input)'.

     --line-buffered
	    Force output to be line buffered instead of block buffered.

     --lines
	    Boolean line matching mode for option --bool, the default mode.

     -M MAGIC, --file-magic=MAGIC
	    Only search files matching the magic signature pattern  MAGIC.   The
	    signature  "magic  bytes" at the start of a file are compared to the
	    MAGIC regex pattern.  When matching,  the  file  will  be  searched.
	    When  MAGIC  is preceded by a `!' or a `^', skip files with matching
	    MAGIC signatures.  This option may be repeated and may  be	combined
	    with options -O and -t.  Every file on the search path is read, mak-
	    ing recursive searches potentially more expensive.

     -m [MIN,][MAX], --min-count=MIN, --max-count=MAX
	    Require  MIN  matches,  stop reading input upon MAX matches.  Output
	    MIN to MAX matches.  For example, -m1 outputs the  first  match  and
	    -cm1,  (with  a comma) counts nonzero matches.  When -u or --ungroup
	    is specified, each individual match counts.  See also option -K.

     --match
	    Match all lines.  Same as specifying an empty pattern to search.

     --max-files=NUM
	    Restrict the number of files matched to NUM.  Note	that  --sort  or
	    -J1  may  be  specified to produce replicable results.  If --sort is
	    specified, then the number of threads spawned is limited to NUM.

     --max-size=MAX
	    Only search files whose physical size does	not  exceed  MAX  bytes.
	    Suffix MAX with kb, mb, gb, tb for kilo, mega, giga, or terabytes.

     --min-size=MIN
	    Only  search  files whose physical size equals or exceeds MIN bytes.
	    Suffix MIN with kb, mb, gb, tb for kilo, mega, giga, or terabytes.

     --mmap[=MAX]
	    Use memory maps to search files.  By default, memory maps  are  used
	    under certain conditions to improve performance.  When MAX is speci-
	    fied, use up to MAX mmap memory per thread.

     -N PATTERN, --neg-regexp=PATTERN
	    Specify  a	negative  PATTERN  to reject specific -e PATTERN matches
	    with a counter pattern.  Note that longer patterns	take  precedence
	    over  shorter  patterns, i.e. a negative pattern must be of the same
	    length or longer to reject matching patterns.  Option -N  cannot  be
	    specified with -P.	This option may be repeated.

     -n, --line-number
	    Each  output  line	is  preceded  by its relative line number in the
	    file, starting at line 1.  The line number counter is reset for each
	    file processed.

     --not [-e] PATTERN
	    Specifies that PATTERN should not match.  Note that -e A --not -e  B
	    matches  lines with `A' or lines without a `B'.  To match lines with
	    `A' that have no `B', specify -e A --andnot -e  B.	 Option  --stats
	    displays  the  search  patterns  applied.	See  also options --and,
	    --andnot, --bool, --files and --lines.

     --null, -0
	    Output a zero byte after the file name.  This  option  can	be  used
	    with commands such as `find -print0' and `xargs -0' to process arbi-
	    trary  file  names,  even those that contain newlines.  See also op-
	    tions -H or --with-filename and --null-data.

     --null-data, -00
	    Input and output are treated as sequences of lines	with  each  line
	    terminated	by  a  zero byte instead of a newline; effectively swaps
	    NUL with LF in the input and the output.  When combined with  option
	    --encoding=ENCODING,  output  each	line  terminated  by a zero byte
	    without affecting the input specified as per ENCODING.   Instead  of
	    option  --null-data, option --encoding=null-data treats the input as
	    a sequence of lines terminated by a zero byte without affecting  the
	    output.   Option --null-data is not compatible with UTF-16/32 input.
	    Since ugrep matches multiple lines when patterns are specified  con-
	    taining  a	newline  `\n'  or  `\R', this option is not required for
	    multi-line matching.  See also options --encoding and --null.

     -O EXTENSIONS, --file-extension=EXTENSIONS
	    Only search files whose  filename  extensions  match  the  specified
	    comma-separated  list  of  EXTENSIONS,  same  as -g '*.ext' for each
	    `ext' in EXTENSIONS.  When an `ext' is preceded by a `!' or  a  `^',
	    skip  files  whose	filename  extensions  matches  `ext', same as -g
	    '^*.ext'.  This option may be repeated and may be combined with  op-
	    tions -g, -M and -t.

     -o, --only-matching
	    Only the matching part of a pattern match is output.  When -A, -B or
	    -C is specified, fits the match and its context on a line within the
	    specified number of columns.

     --only-line-number
	    Only  the line number of a matching line is output.  The line number
	    counter is reset for each file processed.

     -P, --perl-regexp
	    Interpret PATTERN as a Perl regular expression  using  PCRE2.   Note
	    that  Perl pattern matching differs from the default grep POSIX pat-
	    tern matching.

     -p, --no-dereference
	    If -R or -r is specified, do not follow symbolic  links,  even  when
	    symbolic links are specified on the command line.

     --pager[=COMMAND]
	    When  output  is  sent to the terminal, uses COMMAND to page through
	    the output.  COMMAND defaults to environment variable PAGER when de-
	    fined or `less'.  Enables --heading and --line-buffered.

     --pretty[=WHEN]
	    When output is  sent  to  the  terminal,  enables  options	--color,
	    --heading,	-n,  --sort, --tree and -T when not explicitly disabled.
	    WHEN can be `never', `always', or `auto'.  The default is `auto'.

     -Q[=DELAY], --query[=DELAY]
	    Query mode: start a TUI to perform interactive searches.  This  mode
	    requires  an  ANSI capable terminal.  An optional DELAY argument may
	    be specified to reduce or increase	the  response  time  to  execute
	    searches after the last key press, in increments of 100ms, where the
	    default  is  3 (300ms delay).  No whitespace may be given between -Q
	    and its argument DELAY.  Initial patterns may be specified	with  -e
	    PATTERN,  i.e.  a  PATTERN argument requires option -e.  Press F1 or
	    CTRL-Z to view the help screen.  Press F2 or CTRL-Y to invoke a com-
	    mand to view or edit the file shown at the top of the screen.   This
	    command can be specified with option --view and defaults to environ-
	    ment variable PAGER when defined, or VISUAL or EDITOR.  Press TAB or
	    SHIFT-TAB  to  navigate  directories and to select a file to search.
	    Press ENTER to select lines to output.  Press ALT-l for option -l to
	    list files, ALT-n for -n, etc.  Non-option commands include ALT-] to
	    increase context and ALT-} to increase fuzzyness.  If ALT or  OPTION
	    keys  are  not  available,	then press CTRL-O + KEY to switch option
	    `KEY', or press F1 or CTRL-Z for help and press KEY.  See  also  op-
	    tions --no-confirm, --delay, --split and --view.

     -q, --quiet, --silent
	    Quiet  mode:  suppress all output.	Only search a file until a match
	    has been found.

     -R, --dereference-recursive
	    Recursively read all files under each directory, following	symbolic
	    links to files and directories, unlike -r.

     -r, --recursive
	    Recursively  read all files under each directory, following symbolic
	    links only if they are on the command line.  Note that when no  FILE
	    arguments are specified and input is read from a terminal, recursive
	    searches are performed as if -r is specified.

     --replace=FORMAT
	    Replace  matching  patterns in the output by FORMAT with `%' fields.
	    If -P is specified, FORMAT may include `%1' to `%9',  `%[NUM]#'  and
	    `%[NAME]#'	to  output  group captures.  A `%%' outputs `%' and `%~'
	    outputs a newline.	See also option --format, `ugrep --help  format'
	    and `man ugrep' section FORMAT for details.

     -S, --dereference-files
	    When -r is specified, follow symbolic links to files, but not to di-
	    rectories.	The default is not to follow symbolic links.

     -s, --no-messages
	    Silent  mode: nonexistent and unreadable files are ignored and their
	    error messages and warnings are suppressed.

     --save-config[=FILE] [OPTIONS]
	    Save configuration FILE to include OPTIONS.  Update FILE when  first
	    loaded  with  --config=FILE.  The default FILE is `.ugrep', which is
	    automatically loaded by the ug command.  When FILE is a `-',  writes
	    the  configuration to standard output.  Only part of the OPTIONS are
	    saved that do not cause searches to fail when  combined  with  other
	    options.   Additional  options may be specified by editing the saved
	    configuration file.  A configuration file may be modified by  adding
	    one  or  more config=FILE to include configuration files, but recur-
	    sive configuration file inclusion is not permitted.

     --separator[=SEP], --context-separator=SEP
	    Use SEP as field separator between file name,  line  number,  column
	    number,  byte offset and the matched line.	The default separator is
	    a colon (`:') and a bar (`|') for multi-line pattern matches, and  a
	    dash (`-') for context lines.  See also option --group-separator.

     --split
	    Split the -Q query TUI screen on startup.

     --sort[=KEY]
	    Displays  matching	files in the order specified by KEY in recursive
	    searches.  Normally the ug command sorts by name whereas  the  ugrep
	    batch  command  displays  matches  in no particular order to improve
	    performance.  The sort KEY can be `name' to sort  by  pathname  (de-
	    fault),  `best'  to  sort by best match with option -Z (sort by best
	    match requires two passes over files, which is expensive), `size' to
	    sort by file size, `used' to sort by last access time, `changed'  to
	    sort  by  last  modification  time and `created' to sort by creation
	    time.  Sorting is reversed with `rname', `rbest', `rsize',	`rused',
	    `rchanged', or `rcreated'.	Archive contents are not sorted.  Subdi-
	    rectories are sorted and displayed after matching files.  FILE argu-
	    ments are searched in the same order as specified.

     --stats
	    Output  statistics	on  the number of files and directories searched
	    and the inclusion and exclusion constraints applied.

     -T, --initial-tab
	    Add a tab space to separate the file name, line number, column  num-
	    ber and byte offset with the matched line.

     -t TYPES, --file-type=TYPES
	    Search  only  files associated with TYPES, a comma-separated list of
	    file types.  Each file type corresponds to a set of filename  exten-
	    sions  passed  to  option -O and filenames passed to option -g.  For
	    capitalized file types, the search is expanded to include files with
	    matching file signature magic bytes, as  if  passed  to  option  -M.
	    When  a  type  is  preceded by a `!' or a `^', excludes files of the
	    specified type.  Specifying the initial part of a type name suffices
	    when the choice is unambiguous.  This option may be  repeated.   The
	    possible file types can be (-tlist displays a list): `actionscript',
	    `ada',  `adoc', `asm', `asp', `aspx', `autoconf', `automake', `awk',
	    `Awk', `basic', `batch',  `bison',	`c',  `c++',  `clojure',  `cpp',
	    `csharp', `css', `csv', `dart', `Dart', `delphi', `elisp', `elixir',
	    `erlang', `fortran', `gif', `Gif', `go', `groovy', `gsp', `haskell',
	    `html',  `jade',  `java',  `jpeg', `Jpeg', `js', `json', `jsp', `ju-
	    lia', `kotlin', `less', `lex', `lisp', `lua', `m4',  `make',  `mark-
	    down',  `matlab',  `node',	`Node', `objc', `objc++', `ocaml', `par-
	    rot', `pascal', `pdf', `Pdf', `perl', `Perl', `php',  `Php',  `png',
	    `Png',  `prolog',  `python',  `Python',  `r',  `rpm',  `Rpm', `rst',
	    `rtf', `Rtf', `ruby', `Ruby', `rust',  `scala',  `scheme',	`seed7',
	    `shell',  `Shell', `smalltalk', `sql', `svg', `swift', `tcl', `tex',
	    `text',  `tiff',  `Tiff',  `tt',  `typescript',  `verilog',  `vhdl',
	    `vim', `xml', `Xml', `yacc', `yaml', `zig'.

     --tabs[=NUM]
	    Set  the tab size to NUM to expand tabs for option -k.  The value of
	    NUM may be 1 (no expansion), 2, 4, or 8.  The default size is 8.

     --tag[=TAG[,END]]
	    Disables colors to mark up matches with TAG.  END marks the end of a
	    match if specified, otherwise TAG.	The default is `___'.

     --tree, -^
	    Output directories with matching files in a tree-like format for op-
	    tion -c or --count, -l or --files-with-matches, -L or  --files-with-
	    out-match.	 This  option  is enabled by --pretty when the output is
	    sent to the terminal.

     -U, --ascii, --binary
	    Disables Unicode matching for ASCII and  binary  matching.	 PATTERN
	    matches bytes.  For example, -U '\xa3' matches byte A3 (hex) instead
	    of	the  Unicode code point U+00A3 represented by the UTF-8 sequence
	    C2 A3.  Input is not flagged as "binary"  for  having  invalid  UTF,
	    only for having NUL (zero) bytes.

     -u, --ungroup
	    Do	not  group  multiple  pattern  matches on the same matched line.
	    Output the matched line again for each additional pattern match.

     -V, --version
	    Display version with linked libraries and exit.

     -v, --invert-match
	    Selected lines are those not matching any of the specified patterns.

     --view[=[+]COMMAND]
	    Use COMMAND to view/edit a file in -Q query TUI by pressing  CTRL-Y,
	    +COMMAND waits for a key press after COMMAND terminated.

     -W, --with-hex
	    Output  binary  matches  in hexadecimal, leaving text matches alone.
	    This option is equivalent to the --binary-files=with-hex option.  To
	    omit the matching line from the hex output, use both options -W  and
	    --hexdump.	See also options -U.

     -w, --word-regexp
	    The  PATTERN  is searched for as a word, such that the matching text
	    is preceded by a non-word character and is followed  by  a	non-word
	    character.	 Word-like  characters	are  Unicode letters, digits and
	    connector punctuations such as underscore.

     --width[=NUM]
	    Truncate the output to NUM visible characters per line.   The  width
	    of	the  terminal window is used if NUM is not specified.  Note that
	    double-width characters in the output may result in wider lines.

     -X, --hex
	    Output matches and matching lines in hexadecimal.	This  option  is
	    equivalent	to  the --binary-files=hex option.  To omit the matching
	    line from the hex output use option --hexdump.  See also option -U.

     -x, --line-regexp
	    Select only those matches that exactly match the whole line,  as  if
	    the patterns are surrounded by ^ and $.

     --xml  Output  file  matches  in XML.  When -H, -n, -k, or -b is specified,
	    additional values are output.  See also options --format and -u.

     -Y, --empty
	    Empty-matching patterns match all lines.   Normally,  empty  matches
	    are  not  output, unless a pattern starts with `^' or ends with `$'.
	    With this option, empty-matching patterns, such as x*y?, x*y*z*, and
	    x*(y?|z) match all lines, not only the expected pattern.   This  op-
	    tion  is  enabled by default in grep compatibility mode; specify op-
	    tion --no-empty to prevent matching all lines.

     -y, --any-line, --passthru
	    Any line is output (passthru).  Non-matching  lines  are  output  as
	    context with a `-' separator.  See also options -A, -B and -C.

     -Z[best][+-~][MAX], --fuzzy[=[best][+-~][MAX]]
	    Fuzzy  mode:  report  approximate pattern matches within MAX errors.
	    The default is -Z1: one deletion, insertion or substitution  is  al-
	    lowed.   If `+`, `-' and/or `~' is specified, then `+' allows inser-
	    tions, `-' allows deletions and `~' allows substitutions.  For exam-
	    ple, -Z+~3 allows up to three insertions or  substitutions,  but  no
	    deletions.	 If  `best'  is  specified,  then only the best matching
	    lines are output with the lowest cost per file.  Option  -Zbest  re-
	    quires two passes over a file and cannot be used with standard input
	    or	Boolean  queries.   Option  --sort=best orders matching files by
	    best match.  The first character  of  an  approximate  match  always
	    matches a character at the beginning of the pattern.  To fuzzy match
	    the  first	character, replace it with a `.' or `.?'.  Option -U ap-
	    plies fuzzy matching to ASCII and bytes instead of Unicode text.  No
	    whitespace may be given between -Z and its argument.

     -z, --decompress
	    Search compressed files and archives.  Archives (.cpio, .pax,  .tar)
	    and  compressed  archives  (e.g.  .zip, .7z, .taz, .tgz, .tpz, .tbz,
	    .tbz2, .tb2, .tz2, .tlz, .txz,  .tzst)  are  searched  and	matching
	    pathnames of files in archives are output in braces.  When used with
	    option  --zmax=NUM,  searches  the	contents of compressed files and
	    archives stored within archives up to NUM levels.  When -g, -O,  -M,
	    or -t is specified, searches archives for files that match the spec-
	    ified  globs,  filename  extensions,  file signature magic bytes, or
	    file types, respectively; a side-effect of these options is that the
	    compressed files and archives searched are only those with	filename
	    extensions	that  match  known  compression and archive types.  Sup-
	    ported compression formats: gzip  (.gz),  compress	(.Z),  zip,  7z,
	    bzip2  (.bz,  .bz2, .bzip2, .tbz, .tbz2, .tb2, .tz2), xz (.xz, .txz)
	    and lzma (requires suffix .lzma, .tlz), zstd (.zst,  .zstd,  .tzst),
	    lz4 (requires suffix .lz4), brotli (requires suffix .br), bzip3 (re-
	    quires suffix .bz3).

     --zmax=NUM
	    When  used	with option -z or --decompress, searches the contents of
	    compressed files and archives stored within archives by  up  to  NUM
	    expansion  stages.	 The default --zmax=1 only permits searching un-
	    compressed files stored in cpio, pax, tar, zip and 7z archives; com-
	    pressed files and archives are detected as binary files and are  ef-
	    fectively  ignored.  Specify --zmax=2 to search compressed files and
	    archives stored in cpio, pax, tar, zip and	7z  archives.	NUM  may
	    range  from  1  to	99  for  up to 99 decompression and de-archiving
	    steps.  Increasing NUM values gradually degrades performance.

     Specify `ugrep --help WHAT' for help on WHAT.

EXIT STATUS
     The ugrep utility exits with one of the following values:

     0	    One or more lines were selected.

     1	    No lines were selected.

     >1     An error occurred.

     If -q or --quiet or --silent is used and a line is selected, the exit  sta-
     tus is 0 even if an error occurred.

CONFIGURATION
     The  ug  command is intended for interactive searching and is equivalent to
     the ugrep --config --pretty --sort command to load the `.ugrep`  configura-
     tion  file located in the working directory or, when not found, in the home
     directory.

     A configuration file contains `NAME=VALUE' pairs per line, where `NAME`  is
     the name of a long option (without `--') and `=VALUE' is an argument, which
     is  optional  and	may be omitted depending on the option.  Empty lines and
     lines starting with a `#' are ignored.

     The --config=FILE option and its abbreviated form ---FILE load  the  speci-
     fied  configuration  file	located  in  the  working directory or, when not
     found, in the home directory.  An error is produced when FILE is not  found
     or cannot be read.

     Command  line  options are parsed in the following order: the configuration
     file is loaded first, followed by the remaining options  and  arguments  on
     the command line.

     The --save-config option saves a `.ugrep' configuration file to the working
     directory with a subset of the options specified on the command line.  Only
     part  of the specified options are saved that do not cause searches to fail
     when combined with other options.	The --save-config=FILE option saves  the
     configuration  to	FILE.	The  configuration is written to standard output
     when FILE is a `-'.

GLOBBING
     Globbing is used by options -g (--glob and --iglob), --include,  --include-
     dir, --include-from, --exclude, --exclude-dir, --exclude-from and --ignore-
     files  to	match  pathnames or basenames in recursive searches.  Glob argu-
     ments for these options should be quoted to prevent shell globbing.

     Globbing with --ignore-files supports gitignore syntax and rules.	This  is
     also  the	case  for all other globbing-related options, with the exception
     that a glob matches filenames, not directory names.  If a glob  ends  in  a
     path  separator  `/', then it matches directory names, not filenames, as if
     --include-dir or --exclude-dir is specified.

     When a glob contains a path separator `/', the full  pathname  is	matched.
     Otherwise the basename of a file or directory is matched.	For example, *.h
     matches  foo.h  and bar/foo.h.  bar/*.h matches bar/foo.h but not foo.h and
     not bar/bar/foo.h.  Use a leading `./' or just `/' to force /*.h  to  match
     foo.h in the working directory but not bar/foo.h.

     When a glob starts with a `!' or a `^' as in -g^GLOB, the match is negated.
     Likewise,	a `!' (but not a `^') may be used with globs in the files speci-
     fied --include-from, --exclude-from, and --ignore-files to negate the  glob
     match.  Empty lines or lines starting with a `#' are ignored.

     Glob Syntax and Conventions

     *	    Matches anything except /.

     ?	    Matches any one character except /.

     [abc-e]Matches one character a,b,c,d,e.

     [^abc-e]
	    Matches one character not a,b,c,d,e,/.

     [!abc-e]
	    Matches one character not a,b,c,d,e,/.

     /	    When  used	at  the  start of a glob, matches the working directory.
	    When used at the end of a glob, matches directories only.

     **/    Matches zero or more directories.

     /**    When used at the end of a glob, matches everything after the /.

     \?     Matches a ? or any other character specified after the backslash.

     Glob Matching Examples

     *	    Matches a, b, x/a, x/y/b

     a	    Matches a, x/a, x/y/a,	 but not b, x/b, a/a/b

     /*     Matches a, b,		 but not x/a, x/b, x/y/a

     /a     Matches a,			 but not x/a, x/y/a

     a?b    Matches axb, ayb,		 but not a, b, ab, a/b

     a[xy]b Matches axb, ayb		 but not a, b, azb

     a[a-z]bMatches aab, abb, acb, azb,  but not a, b, a3b, aAb, aZb

     a[^xy]bMatches aab, abb, acb, azb,  but not a, b, axb, ayb

     a[^a-z]b
	    Matches a3b, aAb, aZb	 but not a, b, aab, abb, acb, azb

     a/*/b  Matches a/x/b, a/y/b,	 but not a/b, a/x/y/b

     **/a   Matches a, x/a, x/y/a,	 but not b, x/b.

     a/**/b Matches a/b, a/x/b, a/x/y/b, but not x/a/b, a/b/x

     a/**   Matches a/x, a/y, a/x/y,	 but not a, b/x

     a\?b   Matches a?b,		 but not a, b, ab, axb, a/b

     Note that exclude glob patterns take priority over  include  glob	patterns
     when specified with options -g, --exclude, --exclude-dir, --include and in-
     clude-dir.

     Option  --ignore-files  specifies	a file with gitignore-style globs, where
     the default file is .gitignore.  When ignore files are encountered  in  re-
     cursive  searches, the search is narrowed by excluding filenames and direc-
     tory names matching the globs; this gitignore  glob-matching  rule  differs
     from option --exclude-from which requires globs ending in / to match direc-
     tory names.

ENVIRONMENT
     GREP_PATH
	    May  be used to specify a file path to pattern files.  The file path
	    is used by option -f to open a pattern file, when the  pattern  file
	    does  not  exist.	Defaults to /usr/local/share/ugrep/patterns when
	    GREP_PATH is undefined.

     GREP_COLOR
	    May be used to specify ANSI SGR parameters to highlight matches when
	    option --color is used, e.g. 1;35;40 shows pattern matches	in  bold
	    magenta  text  on  a  black  background.   Deprecated  in  favor  of
	    GREP_COLORS, but still supported.

     GREP_COLORS
	    May be used to specify ANSI SGR parameters to highlight matches  and
	    other attributes when option --color is used.  Its value is a colon-
	    separated	list   of   ANSI   SGR	 parameters   that  defaults  to
	    cx=33:mt=1;31:fn=1;35:ln=1;32:cn=1;32:bn=1;32:se=36 with  additional
	    parameters for TUI colors :qp=1;32:qe=1;37;41:qm=1;32:ql=36:qb=1;35.
	    The mt=, ms=, and mc= capabilities of GREP_COLORS take priority over
	    GREP_COLOR.  Option --colors takes priority over GREP_COLORS.

GREP_COLORS
     Colors  are  specified  as string of colon-separated ANSI SGR parameters of
     the form `what=substring', where `substring' is a semicolon-separated  list
     of ANSI SGR codes or `k' (black), `r' (red), `g' (green), `y' (yellow), `b'
     (blue), `m' (magenta), `c' (cyan), `w' (white).  Upper case specifies back-
     ground  colors.   A  `+'  qualifies  a color as bright.  A foreground and a
     background color may be combined with one or more font properties `n' (nor-
     mal), `f' (faint), `h' (highlight), `i' (invert),	`u'  (underline).   Sub-
     strings may be specified for:

     sl=    selected lines.

     cx=    context lines.

     rv     swaps the sl= and cx= capabilities when -v is specified.

     mt=    matching text in any matching line.

     ms=    matching text in a selected line.  The substring mt= by default.

     mc=    matching text in a context line.  The substring mt= by default.

     fn=    filenames.

     ln=    line numbers.

     cn=    column numbers.

     bn=    byte offsets.

     se=    separators.

     rv     a Boolean parameter, switches sl= and cx= with option -v.

     hl     a Boolean parameter, enables filename hyperlinks (\33]8;;link).

     ne     a Boolean parameter, disables ``erase in line'' \33[K.

     qp=    TUI prompt.

     qe=    TUI errors.

     qr=    TUI regex.

     qm=    TUI regex meta characters.

     ql=    TUI regex lists and literals.

     qb=    TUI regex braces.

FORMAT
     Option  --format=FORMAT  specifies  an  output  format for matches.  Option
     --replace=FORMAT only replaces the matching patterns.  Fields may	be  used
     in FORMAT, which expand into the following values:

     %[TEXT]F
	    if option -H is used: TEXT, the file pathname and separator.

     %f     the file pathname.

     %a     the file basename without directory path.

     %p     the directory path to the file.

     %z     the file pathname in a (compressed) archive.

     %[TEXT]H
	    if	option	-H  is used: TEXT, the quoted pathname and separator, \"
	    and \\ replace " and \.

     %h     the quoted file pathname, \" and \\ replace " and \.

     %[TEXT]I
	    if option -H is used: TEXT, the pathname as XML character  data  and
	    separator.

     %i     the file pathname as XML character data.

     %[TEXT]N
	    if option -n is used: TEXT, the line number and separator.

     %n     the line number of the match.

     %[TEXT]K
	    if option -k is used: TEXT, the column number and separator.

     %k     the column number of the match.

     %[TEXT]B
	    if option -b is used: TEXT, the byte offset and separator.

     %b     the byte offset of the match.

     %[TEXT]T
	    if option -T is used: TEXT and a tab character.

     %t     a tab character.

     %[SEP]$set field separator to SEP for the rest of the format fields.

     %[TEXT]<
	    if the first match: TEXT.

     %[TEXT]>
	    if not the first match: TEXT.

     %,     if not the first match: a comma, same as %[,]>.

     %:     if not the first match: a colon, same as %[:]>.

     %;     if not the first match: a semicolon, same as %[;]>.

     %|     if not the first match: a vertical bar, same as %[|]>.

     %[TEXT]S
	    if not the first match: TEXT and separator, see also %[SEP]$.

     %s     the separator, see also %[TEXT]S and %[SEP]$.

     %~     a newline character.

     %M     the number of matching lines

     %m     the number of matches

     %O     the matching line is output as a raw string of bytes.

     %o     the match is output as a raw string of bytes.

     %Q     the matching line as a quoted string, \" and \\ replace " and \.

     %q     the match as a quoted string, \" and \\ replace " and \.

     %C     the matching line formatted as a quoted C/C++ string.

     %c     the match formatted as a quoted C/C++ string.

     %J     the matching line formatted as a quoted JSON string.

     %j     the match formatted as a quoted JSON string.

     %V     the matching line formatted as a quoted CSV string.

     %v     the match formatted as a quoted CSV string.

     %X     the matching line formatted as XML character data.

     %x     the match formatted as XML character data.

     %w     the width of the match, counting wide characters.

     %d     the size of the match, counting bytes.

     %e     the ending byte offset of the match.

     %Z     the edit distance cost of an approximate match with option -Z

     %u     select unique lines only, unless option -u is used.

     %1     the  first	regex  group capture of the match, and so on up to group
	    %9, same as %[1]#; requires option -P.

     %[NUM]#the regex group capture NUM; requires option -P.

     %[NUM]bthe byte offset of the group capture NUM; requires option -P.  Use e
	    for the ending byte offset and d for the byte length.

     %[NUM1|NUM2|...]#
	    the first group capture NUM that matched; requires option -P.

     %[NUM1|NUM2|...]b
	    the byte offset of the first group capture	NUM  that  matched;  re-
	    quires  option  -P.   Use e for the ending byte offset and d for the
	    byte length.

     %[NAME]#
	    the NAMEd group capture; requires option -P  and  capturing  pattern
	    `(?<NAME>PATTERN)', see also %G.

     %[NAME]b
	    the  byte  offset of the NAMEd group capture; requires option -P and
	    capturing pattern `(?<NAME>PATTERN)'.  Use e  for  the  ending  byte
	    offset and d for the byte length.

     %[NAME1|NAME2|...]#
	    the  first	NAMEd group capture that matched; requires option -P and
	    capturing pattern `(?<NAME>PATTERN)', see also %G.

     %[NAME1|NAME2|...]b
	    the byte offset of the first NAMEd group capture that  matched;  re-
	    quires  option  -P	and capturing pattern `(?<NAME>PATTERN)'.  Use e
	    for the ending byte offset and d for the byte length.

     %G     list of group capture indices/names that  matched;	requires  option
	    -P.

     %[TEXT1|TEXT2|...]G
	    list of TEXT indexed by group capture indices that matched; requires
	    option -P.

     %g     the group capture index/name matched or 1; requires option -P.

     %[TEXT1|TEXT2|...]g
	    the  first	TEXT  indexed  by  the	first  group  capture index that
	    matched; requires option -P.

     %%     the percentage sign.

     Formatted output is written without a terminating	newline,  unless  %~  or
     `\n' is explicitly specified in the format string.

     The  [TEXT]  part of a field is optional and may be omitted.  When present,
     the argument must be placed in [] brackets, for example %[,]F to  output  a
     comma, the pathname, and a separator.

     %[SEP]$ and %u are switches and do not send anything to the output.

     The  separator  used by the %F, %H, %I, %N, %K, %B, %S and %G fields may be
     changed by preceding the field by %[SEP]$.  When  [SEP]  is  not  provided,
     this reverts the separator to the default separator or the separator speci-
     fied with --separator.

     Formatted	output	is written for each matching pattern, which means that a
     line may be output multiple times when patterns match more than once on the
     same line.  If field %u is specified anywhere in a format string,	matching
     lines  are  output  only  once, unless option -u, --ungroup is specified or
     when more than one line of input matched the search pattern.

     Additional formatting options:

     --format-begin=FORMAT
	    the FORMAT when beginning the search.

     --format-open=FORMAT
	    the FORMAT when opening a file and a match was found.

     --format-close=FORMAT
	    the FORMAT when closing a file and a match was found.

     --format-end=FORMAT
	    the FORMAT when ending the search.

     The context options -A, -B, -C, -y, and display options --break, --heading,
     --color, -T, and --null have no effect on formatted output.

EXAMPLES
     Display lines containing the word `patricia' in `myfile.txt':

	    $ ugrep -w patricia myfile.txt

     Display lines containing the word `patricia', ignoring case:

	    $ ugrep -wi patricia myfile.txt

     Display lines approximately matching the word `patricia', ignoring case and
     allowing up to 2 spelling errors using fuzzy search:

	    $ ugrep -Z2 -wi patricia myfile.txt

     Count the number of lines containing `patricia', ignoring case:

	    $ ugrep -cwi patricia myfile.txt

     Count the number of words `patricia', ignoring case:

	    $ ugrep -cowi patricia myfile.txt

     List lines with `amount' and a decimal, ignoring case (space is AND):

	    $ ugrep -i -% 'amount \d+(\.\d+)?' myfile.txt

     The same Boolean search query, but with options -e and --and:

	    $ ugrep -wi -e amount --and '\d+(\.\d+)?' myfile.txt

     List all Unicode words in a file:

	    $ ugrep -o '\w+' myfile.txt

     List the laughing face emojis (Unicode code points U+1F600 to U+1F60F):

	    $ ugrep -o '[\x{1F600}-\x{1F60F}]' myfile.txt

     Check if a file contains any non-ASCII (i.e. Unicode) characters:

	    $ ugrep -q '[^[:ascii:]]' myfile.txt && echo "contains Unicode"

     Display the line and column number of `FIXME' in C++ files using  recursive
     search, with one line of context before and after a matched line:

	    $ ugrep -C1 -R -n -k -tc++ FIXME

     Display  the line and column number of `FIXME' in long Javascript files us-
     ing recursive search, showing only matches with up to 10 characters of con-
     text before and after:

	    $ ugrep -o -C20 -R -n -k -tjs FIXME

     Find blocks of text between lines matching BEGIN and END by  using  a  lazy
     quantifier  `*?'  to match only what is necessary and pattern `\n' to match
     newlines:

	    $ ugrep -n 'BEGIN.*\n(.*\n)*?.*END' myfile.txt

     Likewise, list the C/C++ comments in a file and line numbers:

	    $ ugrep -n -e '//.*' -e '/\*(.*\n)*?.*\*+\/' myfile.cpp

     The same, but using predefined pattern c++/comments:

	    $ ugrep -n -f c++/comments myfile.cpp

     List the lines that need fixing in a C/C++ source file by looking	for  the
     word `FIXME' while skipping any `FIXME' in quoted strings:

	    $ ugrep -e FIXME -N '"(\\.|\\\r?\n|[^\\\n"])*"' myfile.cpp

     The same, but using predefined pattern cpp/zap_strings:

	    $ ugrep -e FIXME -f cpp/zap_strings myfile.cpp

     Find lines with `FIXME' or `TODO', showing line numbers:

	    $ ugrep -n -e FIXME -e TODO myfile.cpp

     Find lines with `FIXME' that also contain `urgent':

	    $ ugrep -n -e FIXME --and urgent myfile.cpp

     The same, but with a Boolean query pattern (a space is AND):

	    $ ugrep -n -% 'FIXME urgent' myfile.cpp

     Find lines with `FIXME' that do not also contain `later':

	    $ ugrep -n -e FIXME --andnot later myfile.cpp

     The same, but with a Boolean query pattern (a space is AND, - is NOT):

	    $ ugrep -n -% 'FIXME -later' myfile.cpp

     Output a list of line numbers of lines with `FIXME' but not `later':

	    $ ugrep -e FIXME --andnot later --format='%,%n' myfile.cpp

     Recursively  list all files with both `FIXME' and `LICENSE' anywhere in the
     file, not necessarily on the same line:

	    $ ugrep -l -%% 'FIXME LICENSE'

     Find lines with `FIXME' in the C/C++ files stored in a tarball:

	    $ ugrep -z -tc++ -n FIXME project.tgz

     Recursively find lines with `FIXME' in C/C++ files, but do not  search  any
     `bak' and `old' directories:

	    $ ugrep -n FIXME -tc++ -g^bak/,^old/

     Recursively search for the word `copyright' in cpio, jar, pax, tar, zip, 7z
     archives, compressed and regular files, and in PDFs using a PDF filter:

	    $ ugrep -z -w --filter='pdf:pdftotext % -' copyright

     Match  the binary pattern `A3hhhhA3' (hex) in a binary file without Unicode
     pattern matching -U (which would otherwise match `\xaf' as a Unicode  char-
     acter U+00A3 with UTF-8 byte sequence C2 A3) and display the results in hex
     with --hexdump with C1 to output one hex line before and after each match:

	    $ ugrep -U --hexdump=C1 '\xa3[\x00-\xff]{2}\xa3' a.out

     Hexdump an entire file using a pager for viewing:

	    $ ugrep -X --pager '' a.out

     List all files that are not ignored by one or more `.gitignore':

	    $ ugrep -l '' --ignore-files

     List  all	files containing a RPM signature, located in the `rpm' directory
     and recursively below up to two levels deeper (3 levels total):

	    $ ugrep -3 -l -tRpm '' rpm/

     Monitor the system log for bug reports and ungroup  multiple  matches  from
     matching lines into separate lines:

	    $ tail -f /var/log/system.log | ugrep -u -i -w bug

     Interactive fuzzy search with Boolean search queries:

	    $ ugrep -Q -l -% -Z2 --sort=best

     Display all words in a MacRoman-encoded file that has CR newlines:

	    $ ugrep --encoding=MACROMAN '\w+' mac.txt

     Display options related to "fuzzy" searching:

	    $ ugrep --help fuzzy

COPYRIGHT
     Copyright (c) 2021-2025 Robert A. van Engelen <engelen@acm.org>

     ugrep  is released under the BSD-3 license.  All parts of the software have
     reasonable copyright terms permitting free redistribution.   This	includes
     the ability to reuse all or parts of the ugrep source tree.

SEE ALSO
     ugrep-indexer(1), grep(1), zgrep(1).

BUGS
     Report bugs at: <https://github.com/Genivia/ugrep/issues>

ugrep 7.8.2			  May 17, 2026				UGREP(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ug&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help