A partir do manpage do grep:
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
Nesse caso, o -h
não funciona.
grep
está procurando por cada um dos caracteres: *
, ?
, <
, c
, o
e m
na cadeia de entrada que você canalizou para ela e imprimindo cada um em uma nova linha como se encontra.
$ echo Zcom\?\<\[\*Z
Zcom?<[*Z
$ echo Zcom\?\<\[\*Z | grep -oh "[*?<com]"
c
o
m
?
<
*
$
Além disso, se você usar grep --color -h "[*?<com]"
, verá as mesmas letras na mesma ordem destacadas dentro da string de pesquisa ecoada.