The question mark

The question mark matches the existence of the preceding character or character class zero or one time only:

$ echo "tt" | awk '/to?t/{print $0}'$ echo "tot" | awk '/to?t/{print $0}'$ echo "toot" | awk '/to?t/{print $0}'$ echo "tt" | sed -r -n '/to?t/p'$ echo "tot" | sed -r -n '/to?t/p'$ echo "toot" | sed -r -n '/to?t/p'

In the first two examples, the character o exists zero and one time, whereas in the third example, it exists two times, which doesn't match the pattern

In the same way, you can use the question mark with the character class:

$ echo "tt" | awk '/t[oa]?t/{print $0}'$ echo "tot" | awk '/t[oa]?t/{print $0}'

Get Mastering Linux Shell Scripting now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.