Chef which nodes have role

Why is it so hard to find out which nodes have a given role or recipe in chef?

The only way seems to loop yourself:
for node in $(knife node list); do
   if knife node show -r $node | grep 'role\[base\]' >/dev/null; then       
     echo $node;
Did I miss some other obvious way? I'd like to have some "knife run_list filter ..." command!