expr supports pattern matching and other string operators. These have higher precedence than both the numeric and relational operators (in the next sections).
grep
) regular
expression, with a ^
implicitly prepended. The first argument is
then matched against this regular expression.
If the match succeeds and regex uses ‘\(’ and ‘\)’, the
:
expression returns the part of string that matched the
subexpression; otherwise, it returns the number of characters matched.
If the match fails, the :
operator returns the null string if
‘\(’ and ‘\)’ are used in regex, otherwise 0.
Only the first ‘\( ... \)’ pair is relevant to the return value; additional pairs are meaningful only for grouping the regular expression operators.
In the regular expression, \+
, \?
, and \|
are
operators which respectively match one or more, zero or one, or separate
alternatives. SunOS and other expr's treat these as regular
characters. (POSIX allows either behavior.)
See Regular Expression Library, for details of
regular expression syntax. Some examples are in Examples of expr.
/
.
This makes it possible to test expr length + "$x"
or
expr + "$x" : '.*/\(.\)'
and have it do the right thing even if
the value of $x happens to be (for example) /
or index
.
This operator is a GNU extension. Portable shell scripts should use
" $token" : ' \(.*\)'
instead of + "$token"
.
To make expr interpret keywords as strings, you must use the
quote
operator.