Можно получить запросы полезной информации udev
(в системах, которые используют его - почти весь настольный тип Linux наверняка). Например, если Вы хотите знать, который присоединил диск, связан с /dev/sdb
, можно использовать:
udevadm info --query=property --name=sdb
Это покажет Вам список свойств того устройства, включая сериал (ID_SERIAL_SHORT). Имея ту информацию, можно посмотреть на вывод lsusb -v
и узнайте вещи как производитель и название продукта.
Более короткий путь, чтобы сделать это было бы
udevadm info --query=property --name=sdb | grep "\(MODEL_ID\|VENDOR_ID\)"
и посмотрите строку с соответствием $ID_VENDOR_ID:$ID_MODEL_ID
в намного более коротком выводе lsusb
.
Другая полезная опция udevadm monitor
. Используйте его, если Вы хотели бы, знают, какой узел устройства создается при присоединении устройства. Так первый показ
udevadm monitor --udev --subsystem-match=block
И затем подключите устройство. Вы будете видеть имена устройств обнаруженных блочных устройств (диски/разделы), распечатанные в конце каждой выходной строки.
Вот функция, можно вставить Ваш .bashrc
(или .zshrc
) :
listusbdisks () { [[ "x$1" == "x-v" ]] && shift && local VERBOSE=-v for dsk in ${@-/dev/sd?} do /sbin/udevadm info --query=path --name="$dsk" | grep --colour=auto -q usb || continue echo "===== device $dsk is:" ( eval $(/sbin/udevadm info --query=property --name="$dsk" | grep "\(MODEL\|VENDOR\)_ID") [ "$ID_VENDOR_ID:$ID_MODEL_ID" == ":" ] && echo "Unknown" || \ lsusb $VERBOSE -d "$ID_VENDOR_ID:$ID_MODEL_ID" ) grep -q "$dsk" /proc/mounts && echo "----- DEVICE IS MOUNTED ----" echo done }
Используйте его как это:
listusbdisks
- распознать все /dev/sdx
устройства;listusbdisks sdb
или listusbdisks /dev/sdb
или listusbdisks sdb sdc
- получить информацию об определенных устройствах только;listusbdisks -v [optional devices as above]
- показать подробные выводы lsusb
[Править]: Добавленный некоторая функциональность как запросы многих устройств, проверка монтируется и многословие управления lsusb
.
Принятие исходного вопроса означало считать количество строк, соответствующих указанным выше требованиям, затем это должно сделать это:
grep -e '\<[[:upper:]][[:alpha:]]\{4,9\}\>' file|wc -l
Принятие его означало печатать номера строки, которые соответствуют:
awk --re-interval '{line = line + 1} /\<[[:upper:]][[:alpha:]]{4,9}\>/ {print line}' file
egrep "^[A-Z]" FILE | egrep -c "\b[A-Za-z]{5,10}\b"
Путем вопрос теперь, это означает, отфильтруйте строки, начиная с прописной буквы (как эта строка) [строка должна запуститься с прописной буквы - не слово], и включать слово (не обязательно первое слово), который является 5 - 10 символами долго.
Да, после чтения исходного вопроса существует 4 возможности интерпретировать его: Стартовое слово должно выполнить оба требования, или это - стартовое слово и другое слово, и: Получите номера строки или количество строк.
Для печати номеров строки для строк, которые начинаются с прописной буквы и содержат слово где-нибудь длины 5-10, мы используем sed:
sed -nr '/^[A-Z][a-z]{4,9}/=;/^[A-Z].*\b[A-Za-z]{5,10}\b/=' FILE
find the number of (lines in a text file that (have words which are 5 to 10 character long) and (begin with a capital letter))
ИЛИ find the number of lines in a text file that have (words (which are 5 to 10 character long) and (begin with a capital letter))
.
– user unknown
17.04.2011, 03:55