@c This file is part of the GNU gettext manual.
@c Copyright (C) 1995-2019 Free Software Foundation, Inc.
@c See the file gettext.texi for copying conditions.

@pindex msggrep
@cindex @code{msggrep} program, usage
@example
msggrep [@var{option}] [@var{inputfile}]
@end example

@cindex search messages in a catalog
The @code{msggrep} program extracts all messages of a translation catalog
that match a given pattern or belong to some given source files.

@subsection Input file location

@table @samp
@item @var{inputfile}
Input PO file.

@item -D @var{directory}
@itemx --directory=@var{directory}
@opindex -D@r{, @code{msggrep} option}
@opindex --directory@r{, @code{msggrep} option}
Add @var{directory} to the list of directories.  Source files are
searched relative to this list of directories.  The resulting @file{.po}
file will be written relative to the current directory, though.

@end table

If no @var{inputfile} is given or if it is @samp{-}, standard input is read.

@subsection Output file location

@table @samp
@item -o @var{file}
@itemx --output-file=@var{file}
@opindex -o@r{, @code{msggrep} option}
@opindex --output-file@r{, @code{msggrep} option}
Write output to specified file.

@end table

The results are written to standard output if no output file is specified
or if it is @samp{-}.

@subsection Message selection

@example
  [-N @var{sourcefile}]... [-M @var{domainname}]...
  [-J @var{msgctxt-pattern}] [-K @var{msgid-pattern}] [-T @var{msgstr-pattern}]
  [-C @var{comment-pattern}]
@end example

A message is selected if
@itemize @bullet
@item it comes from one of the specified source files,
@item or if it comes from one of the specified domains,
@item or if @samp{-J} is given and its context (msgctxt) matches
@var{msgctxt-pattern},
@item or if @samp{-K} is given and its key (msgid or msgid_plural) matches
@var{msgid-pattern},
@item or if @samp{-T} is given and its translation (msgstr) matches
@var{msgstr-pattern},
@item or if @samp{-C} is given and the translator's comment matches
@var{comment-pattern}.
@end itemize

When more than one selection criterion is specified, the set of selected
messages is the union of the selected messages of each criterion.

@var{msgctxt-pattern} or @var{msgid-pattern} or @var{msgstr-pattern} syntax:
@example
  [-E | -F] [-e @var{pattern} | -f @var{file}]...
@end example
@var{pattern}s are basic regular expressions by default, or extended regular
expressions if -E is given, or fixed strings if -F is given.

@table @samp
@item -N @var{sourcefile}
@itemx --location=@var{sourcefile}
@opindex -N@r{, @code{msggrep} option}
@opindex --location@r{, @code{msggrep} option}
Select messages extracted from @var{sourcefile}.  @var{sourcefile} can be
either a literal file name or a wildcard pattern.

@item -M @var{domainname}
@itemx --domain=@var{domainname}
@opindex -M@r{, @code{msggrep} option}
@opindex --domain@r{, @code{msggrep} option}
Select messages belonging to domain @var{domainname}.

@item -J
@itemx --msgctxt
@opindex -J@r{, @code{msggrep} option}
@opindex --msgctxt@r{, @code{msggrep} option}
Start of patterns for the msgctxt.

@item -K
@itemx --msgid
@opindex -K@r{, @code{msggrep} option}
@opindex --msgid@r{, @code{msggrep} option}
Start of patterns for the msgid.

@item -T
@itemx --msgstr
@opindex -T@r{, @code{msggrep} option}
@opindex --msgstr@r{, @code{msggrep} option}
Start of patterns for the msgstr.

@item -C
@itemx --comment
@opindex -C@r{, @code{msggrep} option}
@opindex --comment@r{, @code{msggrep} option}
Start of patterns for the translator's comment.

@item -X
@itemx --extracted-comment
@opindex -X@r{, @code{msggrep} option}
@opindex --extracted-comment@r{, @code{msggrep} option}
Start of patterns for the extracted comments.

@item -E
@itemx --extended-regexp
@opindex -E@r{, @code{msggrep} option}
@opindex --extended-regexp@r{, @code{msggrep} option}
Specify that @var{pattern} is an extended regular expression.

@item -F
@itemx --fixed-strings
@opindex -F@r{, @code{msggrep} option}
@opindex --fixed-strings@r{, @code{msggrep} option}
Specify that @var{pattern} is a set of newline-separated strings.

@item -e @var{pattern}
@itemx --regexp=@var{pattern}
@opindex -e@r{, @code{msggrep} option}
@opindex --regexp=@r{, @code{msggrep} option}
Use @var{pattern} as a regular expression.

@item -f @var{file}
@itemx --file=@var{file}
@opindex -f@r{, @code{msggrep} option}
@opindex --file@r{, @code{msggrep} option}
Obtain @var{pattern} from @var{file}.

@item -i
@itemx --ignore-case
@opindex -i@r{, @code{msggrep} option}
@opindex --ignore-case@r{, @code{msggrep} option}
Ignore case distinctions.

@item -v
@itemx --invert-match
@opindex -v@r{, @code{msggrep} option}
@opindex --invert-match@r{, @code{msggrep} option}
Output only the messages that do not match any selection criterion, instead
of the messages that match a selection criterion.

@end table

@subsection Input file syntax

@table @samp
@item -P
@itemx --properties-input
@opindex -P@r{, @code{msggrep} option}
@opindex --properties-input@r{, @code{msggrep} option}
Assume the input file is a Java ResourceBundle in Java @code{.properties}
syntax, not in PO file syntax.

@item --stringtable-input
@opindex --stringtable-input@r{, @code{msggrep} option}
Assume the input file is a NeXTstep/GNUstep localized resource file in
@code{.strings} syntax, not in PO file syntax.

@end table

@subsection Output details

@c --no-escape and --escape omitted on purpose.  They are not useful.

@table @samp
@item --color
@itemx --color=@var{when}
@opindex --color@r{, @code{msggrep} option}
Specify whether or when to use colors and other text attributes.
See @ref{The --color option} for details.

@item --style=@var{style_file}
@opindex --style@r{, @code{msggrep} option}
Specify the CSS style rule file to use for @code{--color}.
See @ref{The --style option} for details.

@item --force-po
@opindex --force-po@r{, @code{msggrep} option}
Always write an output file even if it contains no message.

@item --indent
@opindex --indent@r{, @code{msggrep} option}
Write the .po file using indented style.

@item --no-location
@opindex --no-location@r{, @code{msggrep} option}
Do not write @samp{#: @var{filename}:@var{line}} lines.

@item -n
@itemx --add-location=@var{type}
@opindex --add-location@r{, @code{msggrep} option}
Generate @samp{#: @var{filename}:@var{line}} lines (default).

The optional @var{type} can be either @samp{full}, @samp{file}, or
@samp{never}.  If it is not given or @samp{full}, it generates the
lines with both file name and line number.  If it is @samp{file}, the
line number part is omitted.  If it is @samp{never}, it completely
suppresses the lines (same as @code{--no-location}).

@item --strict
@opindex --strict@r{, @code{msggrep} option}
Write out a strict Uniforum conforming PO file.  Note that this
Uniforum format should be avoided because it doesn't support the
GNU extensions.

@item -p
@itemx --properties-output
@opindex -p@r{, @code{msggrep} option}
@opindex --properties-output@r{, @code{msggrep} option}
Write out a Java ResourceBundle in Java @code{.properties} syntax.  Note
that this file format doesn't support plural forms and silently drops
obsolete messages.

@item --stringtable-output
@opindex --stringtable-output@r{, @code{msggrep} option}
Write out a NeXTstep/GNUstep localized resource file in @code{.strings} syntax.
Note that this file format doesn't support plural forms.

@item -w @var{number}
@itemx --width=@var{number}
@opindex -w@r{, @code{msggrep} option}
@opindex --width@r{, @code{msggrep} option}
Set the output page width.  Long strings in the output files will be
split across multiple lines in order to ensure that each line's width
(= number of screen columns) is less or equal to the given @var{number}.

@item --no-wrap
@opindex --no-wrap@r{, @code{msggrep} option}
Do not break long message lines.  Message lines whose width exceeds the
output page width will not be split into several lines.  Only file reference
lines which are wider than the output page width will be split.

@item --sort-output
@opindex --sort-output@r{, @code{msggrep} option}
Generate sorted output.  Note that using this option makes it much harder
for the translator to understand each message's context.

@item --sort-by-file
@opindex --sort-by-file@r{, @code{msggrep} option}
Sort output by file location.

@end table

@subsection Informative output

@table @samp
@item -h
@itemx --help
@opindex -h@r{, @code{msggrep} option}
@opindex --help@r{, @code{msggrep} option}
Display this help and exit.

@item -V
@itemx --version
@opindex -V@r{, @code{msggrep} option}
@opindex --version@r{, @code{msggrep} option}
Output version information and exit.

@end table

@subsection Examples

To extract the messages that come from the source files
@code{gnulib-lib/error.c} and @code{gnulib-lib/getopt.c}:

@smallexample
msggrep -N gnulib-lib/error.c -N gnulib-lib/getopt.c input.po
@end smallexample

To extract the messages that contain the string ``Please specify'' in the
original string:

@smallexample
msggrep --msgid -F -e 'Please specify' input.po
@end smallexample

To extract the messages that have a context specifier of either ``Menu>File''
or ``Menu>Edit'' or a submenu of them:

@smallexample
msggrep --msgctxt -E -e '^Menu>(File|Edit)' input.po
@end smallexample

To extract the messages whose translation contains one of the strings in the
file @code{wordlist.txt}:

@smallexample
msggrep --msgstr -F -f wordlist.txt input.po
@end smallexample
