Apenas:
grep -x '[[:alnum:]|]*'
Ou seja, qualquer sequência de 0 ou mais alnums ou |
. Você não precisa de regexps estendidos ( -E
) aqui. Essa sintaxe é válida em regexps básicos e estendidos (e PCRE e a maioria dos outros regexps, a única coisa que pode não ser suportada em alguns seria a classe de caracteres [:alnum:]
POSIX).
A única coisa que faltava na sua era a opção -x
para forçar o regexp a combinar na linha como um todo, ao invés de encontrar correspondências dentro da linha. O aninhamento de expressões regulares foi um exagero. Você precisaria disso se quisesse que os campos delimitados por |
não estivessem vazios:
grep -xE '[[:alnum:]]+(\|[[:alnum:]]+)*'
O que também pode ser feito com REs básicos, embora de forma menos legível:
grep -x '[[:alnum:]]\{1,\}\(|[[:alnum:]]\{1,\}\)*'