Most disk drivers use the sd prefix, but not all. Historically sd stood for “SCSI disk”, but most disks use a protocol which is close to SCSI, and most of Linux's disk drivers use the generic sd layer plus a controller-specific part. However, this is not an obligation, so you need to check with your hardware. For example, eMMC devices have the prefix mmcblk. Some hardware RAID drivers use a different prefix. Virtual machine disks may or may not be /dev/sd* depending on the virtualization technology.
Note that sd includes removable drivers as well. For example all USB drives have the sd prefix, regardless of whether they're hard disks, USB keys, SDcard readers, etc.
Note also that grep sd is very fragile since it matches sd anywhere on the line, for example in a disk or partition label. grep '^sd' would be less fragile.
All in all, grep '^sd' does something that isn't very useful, but may happen to work for you, depending on your hardware. If you migrate your installation to different hardware, it may stop working. So you should try to find something else. What else to use depends on what you mean by “all disk (…) (not include flash card or rom)”. Flash is a disk technology, after all, and there's no reason to distinguish it from rotating disks. And it's usually a bad idea to rely on the fact that a machine is or is not virtualized. And if you start using RAID, it isn't clear whether you're interested in the underlying hardware or in the partitions that are available for software.
If you want to see only non-removable drives, look in /sys/block/* and check which ones contain 0 in the removable file. This includes “non-hardware” block devices such as RAID/LVM holders and loop devices.
Under Linux, I recommend using LVM for non-removable media. It makes administration a lot easier. If you use LVM then either pvdisplay or lvdisplay probably shows the information you're after (but of course I can't tell for sure since you didn't tell what you're after).