Извлечение чисел из строки с помощью сценариев bash

Is there something which a docker container can't be used for while a Linux virtual machine can?

Конечно. Контейнер — это просто процесс :, он не может вести себя как другой процессор, не может загружать другое ядро ​​и не может запускать другую операционную систему. Виртуальная машина может делать все эти вещи. Поскольку все состояние виртуальной машины сохраняется внутри гипервизора, ее можно приостановить/возобновить, перенести на другие физические хосты и выполнить аналогичные действия, которые затруднительны или невозможны при использовании существующей технологии контейнеров.

Is it correct that if you require a Linux kernel version different from the host's, you can only use a virtual machine not a docker container?

Верно. Контейнеры — это просто процессы, работающие в ядре хоста, точно так же, как и неконтейнерные -процессы на хосте.

In particular, Docker and VirtualBox seem to put KVM/QEMU at disadvantage.

У них разные варианты использования. В зависимости от того, что вы хотите сделать, любая технология может оказаться лучшим выбором.

1
29.04.2020, 06:48
4 ответа

Аргументы для опций xinputпринимают имена устройств в виде строк:

$ xinput --list --id-only '2.4G Composite Devic'
29
$ xinput --disable '2.4G Composite Devic' # Equivalent to 'xinput --disable 29'
  • Имя должно быть полным (не может содержать подстановочные знаки или шаблоны регулярных выражений)
2
19.03.2021, 02:21

На случай, если регулярное выражение все еще нужно, вот решение на основе perl -:

echo "↳ 2.4G Composite Devic id=29   [slave  keyboard (3)]" | perl -pe 's/.*id=(\d+)\s.*/$1/g'
2
19.03.2021, 02:21

Использованиеawk:

echo "2.4G Composite Devic id=29   [slave  keyboard (3)]" | awk '{gsub(/id=/,"",$4); print $4}'
29

Использованиеsed:

echo "2.4G Composite Devic id=29   [slave  keyboard (3)]" | sed 's/.*id\=\([0-9]\+\).*/\1/g'
29

Использование grep:

echo "2.4G Composite Devic id=29   [slave  keyboard (3)]" | grep -Eo 'id=[0-9]+' | grep -Eo '[0-9]+'
29
1
19.03.2021, 02:21

sedявляется надмножеством grepздесь, так что вы можете сделать:

xinput list |
  sed -n '/.*2\.4G Composite Devic.*id=\([[:digit:]]\{1,\}\).*/\1/p'

Если ваш sedподдерживает -Eдля расширенных регулярных выражений, это становится немного более разборчивым:

xinput list |
  sed -nE '/.*2\.4G Composite Devic.*id=([[:digit:]]+).*/\1/p'

С реализациями grep, которые поддерживают-o(для вывода согласованной части )и -Pдля PCRE:

xinput list | grep -Po '2\.4G Composite Devic.*id=\K\d+'
0
19.03.2021, 02:21

Теги

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