регулярное выражение для извлечения информации в сценарии оболочки

При нажатии сочетания клавиш или сочетания клавиш в терминале оно передается к приложению, работающему в терминале как последовательность одного или нескольких символов. Например, при нажатии a приложение получает a. При нажатии Enter приложение получает символ CR (иначе. ^M (объявленный “управлением-emm”), иначе число символов 13, иначе. \r или \015). Сочетания клавиш, включающие Высокий звук, обычно передаются как символ ESC (a.ka. ^[ иначе. \e или \033) сопровождаемый последовательностью для сочетания клавиш или сочетания клавиш без Высокого звука. Функциональные клавиши и другие сочетания клавиш передаются как начало escape-последовательностей \e[ или \eO.

Последовательности Escape не полностью стандартизированы, и терминалы обычно игнорируют определенные атрибуты для определенных ключей. Например, Ctrl+Shift+letter часто передается точно как Ctrl+letter по умолчанию.

Вы видите то, что Ваш терминал посылает за сочетанием клавиш путем нажатия Ctrl+V, сопровождаемого тем сочетанием клавиш в приглашении оболочки, или C-q или C-h c сопровождаемый сочетанием клавиш в Emacs.

С некоторыми эмуляторами терминала можно настроить escape-последовательности для каждого ключа. На Xterm это сделано через X ресурсов. Большинство установок читает ресурсы из ~/.Xresources когда X запускается, и можно загрузить файл вручную xrdb -merge ~/.Xresources.

Term.VT100.translations:       #override \n\
    Ctrl ~Shift ~Meta Return: string("\033[73;5~") \n\
    Ctrl Shift ~Meta percent: string("\033[37;6~")

Общая конвенция использует escape-последовательности формы ESC [ number1 ; number2 ~ для функциональных клавиш с модификаторами. number1 указывает на функциональную клавишу (15 кому: 24 для F5 к F12 — по историческим причинам, F1 через F4 имеют различные escape-последовательности), и number2 указывает на модификатор (2 для Сдвига, 5 для Ctrl, 3 для Meta, 8 для Ctrl+Meta, и добавляют 1 для +Shift — нет, это не очень последовательно).

Emacs переводит escape-последовательности в свое внутреннее ключевое представление через input-decode-map или local-function-key-map (или function-key-map перед Emacs 23).

(define-key local-function-key-map "\033[73;5~" [(control return)])
(define-key local-function-key-map "\033[37;6~" [(control ?L)])

5
29.03.2015, 18:34
2 ответа

Многие, много способов. Вот несколько:

  1. GNU GREP

     $ ECHO 3.14.37-1-LTS |  Grep -op '^ [^ -] *'
    3.14.37.
     
  2. SED

     $ ECHO 3.14.37-1-LTS |  Sed 'S / ^ \ ([^ -] * \). * / \ 1 /'
    3.14.37.
     
  3. Perl

     $ ECHO 3.14.37-1-LTS |  Perl -lne '/^(.*?)-/ && print $ 1
    3.14.37.
     

    или

     $ ECHO 3.14.37-1-LTS |  Perl -lpe 's /^(.*?)-.*/$ 1 /'
    3.14.37.
     

    или

     $ ECHO 3.14.37-1-LTS |  Perl -f- -lane 'Print $ f [0]'
    3.14.37.
     
  4.  $ ECHO 3.14.37-1-LTS |  awk -f- '{print $ 1}'
    3.14.37.
     
  5. CUT

     $ ECHO 3.14.37-1-LTS |  Cut -D- -F1.
    3.14.37.
     
  6. Оболочка, даже!

     $ ECHO 3.14.37-1-LTS |  в то время как IFS = - прочитайте B;  сделать эхо "$ a";  Готово
    3.14.37.
     
13
27.01.2020, 20:33

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

Типичные рабочие операционные системы настольных компьютеров, такие как Unix и Windows и типичные мобильные операционные системы, такие как Android и iOS, имеют разные модели безопасности. Unix - это многопользовательская операционная система с взаимно ненадежными пользователями. Приложения считаются доверенными: все приложения пользователя запускаются в одном контексте безопасности. Услуги , с другой стороны, несколько менее доверяют: они обычно выполняются под выделенным счетом, чтобы снизить влияние в случае уязвимости безопасности.

Существует две основные причины, по которым модель безопасности Unix работает так:

  • Негативная причина - это история: когда был разработан UNIX, приложения пришли из небольшого набора программистов и были поддержаны репутацией поставщика или предоставляется как исходный код или оба. Backdoors редко боялись в приложениях. Кроме того, несколько приложений передаются по сети, поэтому было относительно мало возможностей для запуска и эксплуатации уязвимостей. Поэтому не было сильного стимула для изоляции приложений друг от друга.
  • Положительная причина - это функциональность: изолирующие приложения делают много чего невозможно. Если у каждого приложения есть своя собственная область данных, что затрудняет обмен данными между приложениями. На типичной системе UNIX очень распространены для тех же данных, которые будут обрабатываться несколькими приложениями. Это особенно верно, так как Unix не имеет четкого разделения между «приложениями» и «операционной системой». Веб-браузер - это приложение. Неспособность загружать файл в каталог по вашему выбору, потому что браузер ограничен его собственным каталогом, раздражает. Программа, которая отображает меню и значки, когда вы входите в систему, также приложение на той же основе. Итак, файловые менеджеры, которые по определению нужно получить доступ ко всем вашим файлам. Итак, снаряды и другие переводчики, которые выполняют скрипты по всему месту. Когда вы печатаете документ из процессора Word, это может включать приложение для преобразования документа в формат для печати, а другое приложение для отправки данных на принтер.

Хотя существует намного больше авторов приложений, чем 40 лет назад, приложения по-прежнему обычно распространяются через надежные каналы, которые несут индикацию репутации. (Это заметно более верно для Linux, чем для Windows, что является частью причины, почему вирусы более распространены под Windows.) Установлено, что приложение будет отображаться, будет незамедлительно вытащена из репозитории программного обеспечения Linux.

Мобильные операционные системы были разработаны с учетом различных угроз. Они были разработаны для однопользовательских систем, но с приложениями, поступающими от полностью ненадежных источников.

Изоляция приложений начинает способствовать настольным системам Unix. Некоторые распределения запускают определенные программы в рамках безопасности, такие как Apparmor или SELinux , которые ограничивают то, что может сделать приложение. Стоимость этих ограничений безопасности заключается в том, что они иногда делают желаемое использование невозможным, например, предотвращение предотвращения открытия файлов в определенных каталогах.

Шифрование было бы совершенно бесполезно. Шифрование защищает только данные в транзите (по сети) или в покое (хранится на диске), он не защищает данные в живой системе - если подсистема расшифровывает свои данные Затем это зависит от ОС для предотвращения подсистемы B для предотвращения доступа к дешифрованным данным, и, таким образом, не имеет значения, были ли данные расшифрованы или сохранены незашифрованным. Операционная система может шифровать данные, но только для защиты его на случай, если среда хранения украдена.

Если вы хотите запустить код, который вы не доверяете, лучше всего сделать, это запустить его на виртуальной машине. Дайте доступ к виртуальной машине только к файлам, которые требуют приложений (например, не делитесь домашним каталогом).

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

-121-------67120-

Один подход не охвачен всеобъемлющим ответом - расширение параметра Bash (который не требует дополнительного процесса):

vers=$(uname -r) && printf "%s\n" "${vers%%-*}"
3.14.37

vers="-jwl35" && printf "%s\n" "${vers#*-}"
jwl35
1
27.01.2020, 20:33

Теги

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