#!/bin/bash

extract_drivers() {
  # Reads udevadm info -a output on stdin and prints driver names (dedup later)
  awk '
    # Match: DRIVERS=="foo" or DRIVER=="foo"
    match($0, /DRIVERS?=="[^"]+"/) {
      s = substr($0, RSTART, RLENGTH)   # e.g. DRIVERS=="foo"
      sub(/^DRIVERS?=="/, "", s)        # -> foo"
      sub(/"$/, "", s)                  # -> foo
      print s
    }
  '
}

echo "---- MMC ----"
udevadm info -a -n /dev/mmcblk* 2>/dev/null | extract_drivers | sort -u

echo "---- sdX ----"
udevadm info -a -n /dev/sd[a-z]* 2>/dev/null | extract_drivers | sort -u

echo "---- nvme ----"
udevadm info -a -n /dev/nvme* 2>/dev/null | extract_drivers | sort -u

