Как я могу считать строки со словами случая заголовка определенной длины?

Используя udev:

Можно получить запросы полезной информации 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.

3
29.07.2015, 02:28
2 ответа

Принятие исходного вопроса означало считать количество строк, соответствующих указанным выше требованиям, затем это должно сделать это:

grep -e '\<[[:upper:]][[:alpha:]]\{4,9\}\>' file|wc -l

Принятие его означало печатать номера строки, которые соответствуют:

awk --re-interval '{line = line + 1} /\<[[:upper:]][[:alpha:]]{4,9}\>/ {print line}' file
7
27.01.2020, 21:13
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 
0
27.01.2020, 21:13
  • 1
    Трудно сказать еще без некоторой информации из исходного плаката, но я верю тому, именно это @dimpal намеревался в исходном вопросе - считать количеством строк, которые имели по крайней мере одно слово между 5 и 10 символами долго, которое запускается с прописной буквы. Также решение, которое Вы отправили, будет соответствовать строке "F foobar", например. –  tak 17.04.2011, 03:38
  • 2
    Да, намеренно мое первое решение делает. Строка запускается с прописной буквы и содержит слово длины 5-10. Думайте также: 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
  • 3
    Исходным вопросом был "сценарий оболочки в unix/linux, чтобы найти, что количество строк текстового файла имеет слова, которые являются 5 - 10 символами долго, и наличие сначала обозначают буквами как прописная буква", снова, это неоднозначно, но это кажется, что он имел в виду слова, которые запускаются с прописной буквы, не строк, которые запускаются с прописной буквы. –  tak 17.04.2011, 03:59
  • 4
    Ну, tak, я не провалил Вас или предположил, что Ваш ответ является неправильным, но сказал, что я вижу 4 возможности, и я обеспечил то, что я думаю, что решение к 2 интерпретациям, которые не были обращены Вашими решениями - нет? Ваша интерпретация могла бы быть лучше, но теперь я останавливаюсь, чтобы спорить, и работать над исправлением для моих ответов, которое необходимо. Но я могу проголосовать за Ваш ответ, если он следует за моими тестовыми сценариями. :) –  user unknown 17.04.2011, 04:52
  • 5
    Достаточно ярмарка, никакое преступление не предназначило :) –  tak 17.04.2011, 06:01

Теги

Похожие вопросы