Searching for keywords and patterns in tasks is straightforward,
and uses the /pattern/
syntax. First we create some
sample tasks, then we'll search them.
$ task add foo $ task add bar $ task add baz
In order to locate that first task, by the keyword foo
we do this:
$ task /foo/ list ID Age D Description Urg -- ----- - ----------- ---- 1 1min foo 0
The /
characters delimit the search term, indicating
what Taskwarrior should do. Because task annotations are also
searchable text, we can be sure that any annotations containing
the pattern /foo/
will also be found. Let's add a
task with such an annotation:
$ task 3 annotate footwear $ task /foo/ long ID Created Mod Recur Description -- ---------- ----- ----- --------------------- 3 2014-09-28 2min baz 2014-09-28 footwear 1 2014-09-28 2min foo
Here the long
report is used so we can see the full
annotation text. Notice that the foo
in the
description of task 1, as well as the footwear
in
the annotation of task 3 were both found.
Beginning in version
2.4.0
all search terms are by default
regular expressions.
This means we could have searched using this pattern, which means
an f
followed by two o
characters:
$ task /fo{2}/ long ID Created Mod Recur Description -- ---------- ----- ----- --------------------- 3 2014-09-28 3min baz 2014-09-28 footwear 1 2014-09-28 3min foo
In older versions, you would need to explicitly enable regex support like this:
$ task rc.regex:on /fo{2}/ long ID Created Mod Recur Description -- ---------- ----- ----- --------------------- 3 2014-09-28 3min baz 2014-09-28 footwear 1 2014-09-28 3min foo
Or you could put the setting in your .taskrc
file.
You can also turn off regular expression support:
$ task rc.regex:off /fo{2}/ long No matches.
This fails because the search term /fo{2}/
is this
time considered just text, not a regular expression and this term
does not appear in any task.
If your search term contains one or more spaces, then your shell is going to break the search pattern into two arguments, and Taskwarrior will be confused. Solve this by either quoting or escaping like these examples:
$ task '/foo bar/' list $ task /foo\ bar/ list
This guarantees that Taskwarrior sees one argument,
/foo bar/
instead of two, /foo
,
bar/
.
The search pattern syntax of /pattern/
is there as a
convenience, but there are more powerful low-level operators, such
that the above pattern is equivalent to:
$ task description~foo list
Here the ~
match operator works much like that in Bash.
To invert that, to search for descriptions that do not
contain the patter, use the no-match operator:
$ task 'desc!~foo' list
Here you see the !~
no-match operator, an abbreviated
desc
attribute name, and quoting, because Bash will
interpret the !
character in its own way.