Вы не можете разумно выполнить "все" или "это плюс любой из этих" случаев, потому что grep
не поддерживает прогнозирование Используйте Perl. Для «любого» случая это egrep '(str1|str2|str3)' file
.
Необоснованный способ выполнить дело «все»:
egrep '(str1.*str2.*str3|str3.*str1.*str2|str2.*str1.*str3|str1.*str3.*str2)' file
т.е. Вы строите перестановки. Это, конечно, смешная вещь.
Для «это плюс любой из них», аналогично:
egrep '(str1.*(str2|str3)|(str2|str3).*str1)' file