The problem is stdout buffering. "hcitool lescan" does not output its output after every new device found, it just prints it with "\ n" (at least in the blue 5.27 sources that I am viewing). By default, if stdout is a terminal, then a “buffering string” is automatically set for buffering, otherwise it is configured to buffer (see here for a full description). Therefore, when you redirect hcitool output to grep, for example, it is buffered. If you wait long enough, you will see the expected grep result. To overcome this, you can use stdbuf to run hcitool with string buffering stdout:
$ stdbuf -oL hcitool lescan | grep B
source share