ugrep, ug -- file pattern searcher
ugrep [OPTIONS] [-A NUM] [-B
NUM] [-C NUM] [-y] [-Q|PATTERN]
[-f FILE]
[-e PATTERN] [-N PATTERN] [-t
TYPES] [-g GLOBS] [--sort[=KEY]]
[--color[=WHEN]|--colour[=WHEN]]
[--pager[=COMMAND]] [FILE ...]
The ugrep utility searches any given input files, selecting
lines that match one or more patterns. By default, a pattern matches an
input line if the regular expression (RE) matches the input line. A pattern
matches multiple input lines if the RE in the pattern matches one or more
newlines in the input. 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 configuration file located in the working directory or home
directory, see CONFIGURATION. ug is equivalent to ugrep
--config and sorts files by name by default.
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; otherwise, ugrep
assumes the input is ASCII, UTF-8, or raw binary. An input encoding format
may be specified with option --encoding.
If no FILE arguments are specified and standard input is
read from a terminal, 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.
Hidden files and directories are ignored in recursive searches.
Option -. (--hidden) includes hidden files and directories in
recursive searches.
A query interface is opened with -Q (--query) to
interactively specify search patterns and view search results. Note that a
PATTERN argument cannot be specified in this case. To specify one or
more patterns with -Q to start searching, use -e PATTERN.
Option -f FILE matches patterns specified in FILE.
If FILE is large and defines complex regular expression patterns,
then option -P (Perl matching) may improve performance (this omits
POSIX DFA construction.)
ugrep --help WHAT displays help on options related
to WHAT; --help format displays help on --format and
--replace formatting; --help regex displays help on regular
expression syntax and conventions; --help globs displays help on glob
patterns to select files to search; --help fuzzy displays help on
fuzzy (approximate) searching.
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 terminal
driver interprets some of it as commands.
- --and [-e] PATTERN
... -e PATTERN
- Specify additional patterns to match. Patterns must be specified with
-e. Each -e PATTERN following this option is
considered an alternative pattern to match, i.e. each -e is
interpreted as an OR pattern. 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 alternations 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 matched line is displayed in front of the
respective matched line. If -u is specified, displays the offset
for each pattern matched on the same line. Byte offsets are exact for
ASCII, UTF-8 and raw binary input. Otherwise, the byte 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 consequences 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. A match is considered binary when matching a zero byte or
invalid UTF. Short options are -a, -I, -U, -W
and -X.
- --bool,
-%
- Specifies Boolean query patterns. A Boolean query pattern is composed 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 spacing. 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'. Parenthesis 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 pattern 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.
Option --stats displays the 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 --pretty when the output is sent to a terminal.
- -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. If -o
or -u is specified, counts the number of patterns matched. If
-v is specified, counts the number of non-matching lines. If
--tree is specified, outputs directories in a tree-like
format.
- --color[=WHEN],
--colour[=WHEN]
- Mark up the matching text with the expression stored in 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). Parameter values are ANSI SGR color codes or `k'
(black), `r' (red), `g' (green), `y' (yellow), `b' (blue), `m' (magenta),
`c' (cyan), `w' (white). Upper case specifies background colors. A `+'
qualifies a color as bright. A foreground and a background color may be
combined with font properties `n' (normal), `f' (faint), `h' (highlight),
`i' (invert), `u' (underline). Parameter `hl' enables file name
hyperlinks. Parameter `rv' reverses the `sl=' and `cx=' parameters when
option -v is specified. Selectively overrides GREP_COLORS.
- --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, followed by the
remaining options specified on the command line.
- --confirm
- Confirm actions in -Q query mode. The default is confirm.
- --cpp
- Output file matches in C++. See also options --format and
-u.
- --csv
- Output file matches in CSV. If -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. By
default, ACTION is `skip', which means that devices are silently skipped.
If ACTION is `read', devices read just as if they were ordinary
files.
- -d ACTION,
--directories=ACTION
- If an input file is a directory, use ACTION to process it. By default,
ACTION is `skip', i.e., silently skip directories unless specified on the
command line. If ACTION is `read', warn when directories are read as
input. If ACTION 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. If ACTION is
`dereference-recurse', read all files under each directory, recursively,
following symbolic links. This is equivalent to the -R option.
- --depth=[MIN,][MAX],
-1, -2, -3, ... -9, --10, --11,
--12, ...
- Restrict recursive searches from MIN to MAX directory levels deep, where
-1 (--depth=1) searches the specified path without recursing
into subdirectories. Note that -3 -5, -3-5, and
-35 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 used during the search of the input: an input line is
selected if it matches any of the specified patterns. Note that longer
patterns take precedence over shorter patterns. This option is most useful
when multiple -e options are used to specify multiple patterns,
when a pattern begins with a dash (`-'), to specify a pattern after option
-f or after the FILE arguments.
- --encoding=ENCODING
- The encoding format of the input. The default ENCODING is binary and UTF-8
which are the same. Note that option -U specifies binary PATTERN
matching (text matching is the default.) 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'.
- --exclude=GLOB
- Skip files whose name matches GLOB using wildcard matching, same as
-g ^GLOB. GLOB can use **, *, ?, and [...] as wildcards and \ to
quote a wildcard or backslash character literally. When GLOB contains a
`/', full pathnames are matched. Otherwise basenames are matched. When
GLOB ends with a `/', directories are excluded as if --exclude-dir
is specified. 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 can use **, *, ?, and [...] as wildcards and \
to quote a wildcard or backslash character literally. When GLOB contains a
`/', full pathnames are matched. 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.
- --exclude-from=FILE
- Read the globs from FILE and skip files and directories whose name matches
one or more globs. A glob can use **, *, ?, and [...] as wildcards and \
to quote a wildcard or backslash character literally. When a glob contains
a `/', full pathnames are matched. Otherwise basenames are matched. When a
glob ends with a `/', directories are excluded as if --exclude-dir
is specified. Otherwise files are excluded. A glob starting with a `!'
overrides previously-specified exclusions by including matching files.
Lines starting with a `#' and empty lines in FILE are ignored. When FILE
is a `-', standard input is read. This option may be repeated.
- --exclude-fs=MOUNTS
- Exclude file systems specified by MOUNTS from recursive searches, MOUNTS
is a comma-separated list of mount points or pathnames of directories on
file systems. Note that --exclude-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.
- --filter=COMMANDS
- Filter files through the specified COMMANDS first before searching.
COMMANDS is a comma-separated list of `exts:command [option ...]', where
`exts' is a comma-separated list of filename extensions and `command' is a
filter utility. The filter utility should read from standard input and
write to standard output. Files matching one of `exts' are filtered. When
`exts' is `*', files with non-matching extensions are filtered. One or
more `option' separated by spacing may be specified, which are passed
verbatim to the command. A `%' as `option' expands into the pathname to
search. For example, --filter='pdf:pdftotext % -' searches PDF
files. The `%' expands into a `-' when searching standard input. Option
--label=.ext may be used to specify extension `ext' when searching
standard input.
- --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 extension
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.
- -G,
--basic-regexp
- Interpret patterns as basic regular expressions (BREs), i.e. make ugrep
behave as traditional grep.
- -g GLOBS,
--glob=GLOBS
- Search only 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. Otherwise basenames are matched. When `glob' ends
with a `/', directories are matched, same as --include-dir='glob'
and --exclude-dir='glob'. A leading `/' matches the working
directory. This option may be repeated and may be combined with options
-M, -O and -t to expand searches. See `ugrep
--help globs' and `man ugrep' section GLOBBING for details.
- --group-separator[=SEP]
- Use SEP as a group separator for context options -A, -B and
-C. The default is a double hyphen (`--').
- -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 results
from different files. This option is enabled by --pretty when the
output is sent to a terminal.
- --help [WHAT],
-? [WHAT]
- Display a help message, specifically on WHAT when specified. In addition,
`--help format' displays an overview of FORMAT fields,
`--help regex' displays an overview of regular expressions and
`--help globs' displays an overview of glob syntax and
conventions.
- --hexdump=[1-8][a][bch][A[NUM]][B[NUM]][C[NUM]]
- Output matches in 1 to 8 columns of 8 hexadecimal octets. The default is 2
columns or 16 octets per line. Option `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 the match, `B' includes up to NUM hex lines before
the match and `C' includes up to NUM hex lines. When NUM is omitted, the
matching line is included in the output. See also options -U,
-W and -X.
- --hidden,
-.
- Search hidden files and directories.
- --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.
- -i,
--ignore-case
- Perform case insensitive matching. By default, ugrep is case sensitive. By
default, this option applies to ASCII letters only. Use options -P
and -i for Unicode case insensitive matching.
- --ignore-files[=FILE]
- Ignore files and directories matching the globs in each FILE that is
encountered in recursive searches. The default FILE is `.gitignore'.
Matching files and directories located in the directory of a FILE's
location and in directories below are ignored by temporarily extending the
--exclude and --exclude-dir globs, as if
--exclude-from=FILE is locally enforced. Globbing syntax is
the same as the --exclude-from=FILE gitignore syntax;
directories are excluded when the glob ends in a `/', same as git. Files
and directories explicitly specified as command line arguments are never
ignored. This option may be repeated with additional files.
- --include=GLOB
- Search only files whose name matches GLOB using wildcard matching, same as
-g GLOB. GLOB can use **, *, ?, and [...] as wildcards and \
to quote a wildcard or backslash character literally. When GLOB contains a
`/', full pathnames are matched. Otherwise basenames are matched. When
GLOB ends with a `/', directories are included as if --include-dir
is specified. Otherwise files are included. 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 can use **, *, ?, and [...]
as wildcards and \ to quote a wildcard or backslash character literally.
When GLOB contains a `/', full pathnames are matched. 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 can use **, *, ?, and [...] as wildcards
and \ to quote a wildcard or backslash character literally. When a glob
contains a `/', full pathnames are matched. Otherwise basenames are
matched. When a glob ends with a `/', directories are included as if
--include-dir is specified. Otherwise files are included. A glob
starting with a `!' overrides previously-specified inclusions by excluding
matching files. Lines starting with a `#' and empty lines in FILE are
ignored. When FILE is a `-', standard 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 pathnames of
directories on file systems. --include-fs=. restricts recursive
searches to the file system of the working directory only. Note that
--exclude-fs mounts take priority over --include-fs mounts.
This option may be repeated.
- -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 simultaneously.
-J1 disables threading: files are searched in the same order as
specified.
- -j,
--smart-case
- Perform case insensitive matching like option -i, unless a pattern
is specified with a literal ASCII upper case letter.
- --json
- Output file matches in JSON. If -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 at line MAX when specified.
- -k,
--column-number
- The column number of a matched pattern is displayed in front of the
respective matched line, starting at column 1. Tabs are expanded when
columns are counted, 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. If
--tree is specified, outputs directories in a tree-like
format.
- -l,
--files-with-matches
- Only the names of files containing selected lines are written to standard
output. ugrep will only search a file until a match has been found, making
searches potentially less expensive. Pathnames are listed once per file
searched. If the standard input is searched, the string ``(standard
input)'' is written. If --tree is specified, outputs directories in
a tree-like format.
- --label=LABEL
- Displays the LABEL value when input is read from standard input where a
file name would normally be printed in the output. Associates 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
- Apply Boolean queries to match lines, the opposite of --files. This
is the default Boolean query mode to match specific lines.
- -M MAGIC,
--file-magic=MAGIC
- Only files matching the signature pattern MAGIC are searched. 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 to expand the search. Every file on the search
path is read, making searches potentially more expensive.
- -m [MIN,][MAX],
--min-count=MIN, --max-count=MAX
- Require MIN matches, stop after MAX matches when specified. Output MIN to
MAX matches. For example, -m1 outputs the first match and
-cm1, (with a comma) counts non-zero matches. See also option
-K.
- --match
- Match all input. 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, the number of threads spawned is limited to
NUM.
- --mmap[=MAX]
- Use memory maps to search files. By default, memory maps are used under
certain conditions to improve performance. When MAX is specified, use up
to MAX mmap memory per thread.
- -N PATTERN,
--neg-regexp=PATTERN
- Specify a negative PATTERN used during the search of the input: an input
line is selected only if it matches the specified patterns unless it
matches the negative PATTERN. Same as -e (?^PATTERN). Negative
pattern matches are essentially removed before any other patterns are
matched. Note that longer patterns take precedence over shorter patterns.
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.
- --no-group-separator
- Removes the group separator line from the output for context options
-A, -B and -C.
- --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.
- -O EXTENSIONS,
--file-extension=EXTENSIONS
- Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When an `ext' is preceded by a `!' or a `^',
skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive
search.
- -o,
--only-matching
- Output only the matching part of lines. Output additional matches on the
same line with `+' as the field separator. When multiple lines match a
pattern, output the matching lines with `|' as the field separator. If
-A, -B or -C is specified, fits the match and its
context on a line within the specified number of columns.
- --only-line-number
- The line number of the matching line in the file is output without
displaying the match. The line number counter is reset for each file
processed.
- --files
- Apply Boolean queries to match files, the opposite of --lines. A
file matches if all Boolean conditions are satisfied by the lines matched
in the file. For example, --files -e A --and
-e B -e C --andnot -e D
matches a file if some lines match `A' and some lines match (`B' or `C')
and no line in the file matches `D'. May also be specified as
--files --bool 'A B|C -D'. Option -v cannot be
specified with --files. See also options --and,
--andnot, --not, --bool and --lines.
- -P,
--perl-regexp
- Interpret PATTERN as a Perl regular expression using PCRE2. Note that Perl
pattern matching differs from the default grep POSIX pattern
matching.
- -p,
--no-dereference
- If -R or -r is specified, no symbolic links are followed,
even when they are specified on the command line.
- When output is sent to the terminal, uses COMMAND to page through the
output. The default COMMAND is `less -R'. Enables --heading
and --line-buffered.
- --pretty
- When output is sent to a terminal, enables --color,
--heading, -n, --sort, --tree and -T
when not explicitly disabled.
- -Q[DELAY],
--query[=DELAY]
- Query mode: user interface 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 5
(0.5s 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
command to view or edit the file shown at the top of the screen. The
command can be specified with option --view, or defaults to
environment variable PAGER if defined, or EDITOR. Press Tab and 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
fuzziness and ALT-} to increase context. Enables --heading. See
also options --confirm and --view.
- -q, --quiet,
--silent
- Quiet mode: suppress all output. ugrep will only search until a match has
been found.
- -R,
--dereference-recursive
- Recursively read all files under each directory. Follow all symbolic
links, unlike -r. See also option --sort.
- -r,
--recursive
- Recursively read all files under each directory, following symbolic links
only if they are specified 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. See also option
--sort.
- --replace=FORMAT
- Replace matching patterns in the output by the specified 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 option --format, `ugrep
--help format' and `man ugrep' section FORMAT for details.
- -S,
--dereference
- If -r is specified, all symbolic links are followed, like
-R. The default is not to follow symbolic links to
directories.
- -s,
--no-messages
- Silent mode: nonexistent and unreadable files are ignored, i.e. their
error messages and warnings are suppressed.
- --save-config[=FILE]
- Save configuration FILE. By default `.ugrep' is saved. If FILE is a `-',
write the configuration to standard output.
- --separator[=SEP]
- Use SEP as field separator between file name, line number, column number,
byte offset and the matched line. The default is a colon (`:'), a plus
(`+') for additional matches on the same line, and a bar (`|') for
multi-line pattern matches.
- --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 (default), `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. Subdirectories are sorted and displayed after
matching files. FILE arguments 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 number 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 extensions 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. This option may be repeated. The possible file types can be (where
-tlist displays a detailed list): `actionscript', `ada', `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', `julia', `kotlin', `less', `lex', `lisp', `lua',
`m4', `make', `markdown', `matlab', `node', `Node', `objc', `objc++',
`ocaml', `parrot', `pascal', `pdf', `Pdf', `perl', `Perl', `php', `Php',
`png', `Png', `prolog', `python', `Python', `r', `rpm', `Rpm', `rst',
`rtf', `Rtf', `ruby', `Ruby', `rust', `scala', `scheme', `shell', `Shell',
`smalltalk', `sql', `svg', `swift', `tcl', `tex', `text', `tiff', `Tiff',
`tt', `typescript', `verilog', `vhdl', `vim', `xml', `Xml', `yacc',
`yaml'.
- --tabs[=NUM]
- Set the tab size to NUM to expand tabs for option -k. The value of
NUM may be 1, 2, 4, or 8. The default tab 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 when options
-c, -l or -L are used. This option is enabled by
--pretty when the output is sent to a terminal.
- -U, --binary
- Disables Unicode matching for binary file matching, forcing PATTERN to
match bytes, not Unicode characters. For example, -U '\xa3' matches
byte A3 (hex) instead of the Unicode code point U+00A3 represented by the
UTF-8 sequence C2 A3. See also option --dotall.
- -u, --ungroup
- Do not group multiple pattern matches on the same matched line. Output the
matched line again for each additional pattern match, using `+' as a
separator.
- -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 query mode when pressing CTRL-Y.
- -W,
--with-hex
- Output binary matches in hexadecimal, leaving text matches alone. This
option is equivalent to the --binary-files=with-hex option with
--hexdump=2C. To omit the matching line from the hex output,
combine option --hexdump with option -W. See also option
-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 characters are letters, digits and the underscore. With option
-P, word characters are Unicode letters, digits and underscore.
This option has no effect if -x is also specified. 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.
- --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 wide
characters in the output may result in wider lines.
- -X, --hex
- Output matches in hexadecimal. This option is equivalent to the
--binary-files=hex option with --hexdump=2C. To omit the
matching line from the hex output, use option --hexdump instead of
-X. 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 $. 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.
- --xml
- Output file matches in XML. If -H, -n, -k, or
-b is specified, additional values are output. See also options
--format and -u.
- -Y, --empty
- Permits empty matches. By default, empty matches are disabled, unless a
pattern begins with `^' or ends with `$'. With this option, empty-matching
patterns such as x? and x*, match all input, not only lines containing the
character `x'.
- -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 allowed.
If `+`, `-' and/or `~' is specified, then `+' allows insertions, `-'
allows deletions and `~' allows substitutions. For example, -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 requires 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 applies fuzzy matching to ASCII and
bytes instead of Unicode text. No whitespace may be given between
-Z and its argument.
- -z,
--decompress
- Decompress files to search, when compressed. Archives (.cpio, .pax, .tar
and .zip) and compressed archives (e.g. .taz, .tgz, .tpz, .tbz, .tbz2,
.tb2, .tz2, .tlz, .txz, .tzst) are searched and matching pathnames of
files in archives are output in braces. If -g, -O,
-M, or -t is specified, searches files stored in archives
whose filenames match globs, match filename extensions, match file
signature magic bytes, or match file types, respectively. Supported
compression formats: gzip (.gz), compress (.Z), zip, bzip2 (requires
suffix .bz, .bz2, .bzip2, .tbz, .tbz2, .tb2, .tz2), lzma and xz (requires
suffix .lzma, .tlz, .xz, .txz), lz4 (requires suffix .lz4), zstd (requires
suffix .zst, .zstd, .tzst).
- --zmax=NUM
- When used with option -z (--decompress), searches the
contents of compressed files and archives stored within archives by up to
NUM recursive expansions. The default --zmax=1 only permits
searching uncompressed files stored in cpio, pax, tar and zip archives;
compressed files and archives are detected as binary files and are
effectively ignored. Specify --zmax=2 to search compressed files
and archives stored in cpio, pax, tar and zip archives. NUM may range from
1 to 99 for up to 99 decompression and de-archiving steps. Increasing NUM
values gradually degrades performance.
- -0, --null
- Output a zero-byte (NUL) after the file name. This option can be used with
commands such as `find -print0' and `xargs -0' to process
arbitrary file names.
A `--' signals the end of options; the rest of the parameters are
FILE arguments, allowing filenames to begin with a `-' character.
Long options may start with `--no-' to disable, when
applicable.
The regular expression pattern syntax is an extended form of the
POSIX ERE syntax. For an overview of the syntax see README.md or visit:
- https://github.com/Genivia/ugrep
Note that `.' 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 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 status is 0 even if an error occurred.
The ug command is intended for context-dependent
interactive searching and is equivalent to the ugrep --config command
to load the default configuration file `.ugrep' when present in the working
directory or 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 specified configuration file located in the
working directory or, when not found, located 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 current options. The
--save-config=FILE option saves the configuration to
FILE. The configuration is written to standard output when
FILE is a `-'.
Globbing is used by options -g, --include,
--include-dir, --include-from, --exclude,
--exclude-dir, --exclude-from and --ignore-files to
match pathnames and basenames in recursive searches. Glob arguments for
these options should be quoted to prevent shell globbing.
Globbing supports gitignore syntax and the corresponding matching
rules, except that a glob normally matches files but not directories. If a
glob ends in a path separator `/', then it matches directories but not
files, 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 `/' to force /*.h to
match foo.h 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 specified --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 if pathname has no /. 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]b
- Matches aab, abb, acb, azb, but not a, b, a3b, aAb, aZb
- a[^xy]b
- Matches 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 include-dir.
Glob patterns specified with prefix `!' in any of the files
associated with --include-from, --exclude-from and --ignore-files will
negate a previous glob match. That is, any matching file or directory
excluded by a previous glob pattern specified in the files associated with
--exclude-from or --ignore-file will become included again. Likewise, any
matching file or directory included by a previous glob pattern specified in
the files associated with --include-from will become excluded again.
- 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.
- 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. The
mt=, ms=, and mc= capabilities of GREP_COLORS
take priority over GREP_COLOR. Option --colors takes
priority over 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 background colors. A `+' qualifies a color as bright. A
foreground and a background color may be combined with one or more font
properties `n' (normal), `f' (faint), `h' (highlight), `i' (invert), `u'
(underline). Substrings may be specified for:
- sl=
- SGR substring for selected lines.
- cx=
- SGR substring for context lines.
- rv
- Swaps the sl= and cx= capabilities when -v is
specified.
- mt=
- SGR substring for matching text in any matching line.
- ms=
- SGR substring for matching text in a selected line. The substring
mt= by default.
- mc=
- SGR substring for matching text in a context line. The substring
mt= by default.
- fn=
- SGR substring for filenames.
- ln=
- SGR substring for line numbers.
- cn=
- SGR substring for column numbers.
- bn=
- SGR substring for byte offsets.
- se=
- SGR substring for 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.
Option --format=FORMAT specifies an output format
for file matches. Fields may be used in FORMAT, which expand into the
following values:
- %[ARG]F
- if option -H is used: ARG, 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.
- %[ARG]H
- if option -H is used: ARG, the quoted pathname and
separator, \" and \\ replace " and \.
- %h
- the quoted file pathname, \" and \\ replace " and \.
- %[ARG]N
- if option -n is used: ARG, the line number and
separator.
- %n
- the line number of the match.
- %[ARG]K
- if option -k is used: ARG, the column number and
separator.
- %k
- the column number of the match.
- %[ARG]B
- if option -b is used: ARG, the byte offset and
separator.
- %b
- the byte offset of the match.
- %[ARG]T
- if option -T is used: ARG and a tab character.
- %t
- a tab character.
- %[SEP]$
- set field separator to SEP for the rest of the format fields.
- %[ARG]<
- if the first match: ARG.
- %[ARG]>
- if not the first match: ARG.
- %,
- 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 %[|]>.
- %[ARG]S
- if not the first match: ARG and separator, see also
%[SEP]$.
- %s
- the separator, see also %[ARG]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]b
- the 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;
requires 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;
requires 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 [ARG] 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, %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 specified 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.
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 --bool 'amount +(.+)?' myfile.txt
Alternative query:
- $ ugrep -wi -e amount --and '+(.+)?' myfile.txt
List all Unicode words in a file:
- $ ugrep -o '\w+' myfile.txt
List all ASCII words in a file:
- $ ugrep -o '[[:word:]]+' 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 using recursive search, showing only matches with up to 10 characters
of context before and after:
- $ ugrep -o -C20 -R -n -k -tjs FIXME
List the C/C++ comments in a file with line numbers:
- $ ugrep -n -e '//.*' -e '/\*([^*]|(\*+[^*/]))*\*+\/' 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 numberes:
- $ 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 --bool '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 --bool '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 --files --bool '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 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 character 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 on a line:
- $ tail -f /var/log/system.log | ugrep -u -i -w bug
Interactive fuzzy search with Boolean search queries:
- $ ugrep -Q --bool -Z3 --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
Report bugs at:
- https://github.com/Genivia/ugrep/issues
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.