É mais facilmente feito com um display (wireshark) do que com um filtro capture (pcap) .
tshark -n -T fields -e dns.qry.name -f 'src port 53' -Y 'dns.qry.name contains "foo"'
Veja a página pcap-filter
man para o que você pode fazer com os filtros de captura. É bastante limitado, você teria que dissecar o protocolo manualmente. Aqui, como uma aproximação, assumindo que o nome da consulta é sempre 0x20 bytes dentro do pacote udp (para DNS sobre UDP) e sabendo que um nome de consulta não deve ser maior que 253 bytes:
$ printf foo | xxd -p
666f6f
$ tshark -n -T fields -e dns.qry.name -f "src port 53 and $(awk '
BEGIN{
for(i=0;i<250;i++) {
printf sep "(udp[%d]!=0&&((udp[%d:4]&0xffffff00)==0x666f6f00", i+20, i+20
c = c "))"; sep = "||"
}
print c
}')"