Recently, we needed to filter the results of
ps x using two different patterns.
The first pattern was
./ where we needed to match that exact character sequence.
. period character is treated as a special character in regular expressions (it matches a single character of any value, except for the end of line), so we decided to use the
-F parameter to remove this special handling.
Doing this change prevented us from writing a regular expression that uses the
OR | operator.
--fixed-strings) is a matching control option that instructs
grep to interpret the patterns as a list of fixed strings (instead of regular expressions), separated by newlines, any of which is to be matched.
We tried assigning the different patterns as different lines to a variable and then using them on the pipe, like in the following example:
patterns="./ banana"; ps x | grep -F $patterns;
..but it failed.
grep supports a matching control option
-e that allows us to define multiple patterns using different strings.
-e PATTERN (or
--regexp=PATTERN) uses the value PATTERN as the pattern. If this option is used multiple times or it is combined with the
grep will search for all patterns given.
In the end, our command was transformed to the following, which worked just fine!
ps x | grep -F -e "./" -e "banana";