Com expressões regulares no sentido matemático, é possível, mas o tamanho das expressões regulares cresce exponencialmente em relação ao tamanho do alfabeto, por isso não é prático.
Há uma maneira simples com negação e referências anteriores .
grep '[spine]' | grep -Ev '([spine]).*'
O primeiro grep
seleciona linhas que contenham pelo menos um einps
; o segundo grep
rejeita as linhas que contêm mais de uma (por exemplo, permitindo spinal tap
e spend
, mas não foobar
ou see
).