Это дает ожидаемые результаты, которые вы цитируете. Нет необходимости избегать *, потому что мы можем полагаться на «В POSIX awk и gawk операторы« * »,« + »и«? »Означают сами себя, когда в регулярном выражении нет ничего, что им предшествует». поведение здесь, подробнее на https://www.gnu.org/software/gawk/manual/gawk.html#Regexp
$ awk '/*/||/→/' file.txt
foo*
bar→
bar→
foo**
bar→
foo*
bar→
bar→
$
Использование grep вместо:
$ grep -E '\*|→' file.txt