разница между. * И * в обычном выражении

Решение, с которым я столкнулся

Эта проблема все еще несколько беспокоит меня, но я собрал многоцелевое решение, которое очень близко к тому, что исходный вопрос искал до такой степени, что я помечаю этот вопрос как «решенный».

1.) Удалите изменения xorg.conf

Эти изменения в xorg.conf из OP могут быть удалены, поскольку функциональность будет воспроизведена другим способом:

Section "ServerFlags"
    Option            "DontZap"    "false"
EndSection

Section "InputClass"
    Identifier        "Keyboard Defaults"
    MatchIsKeyboard   "yes"
    Option            "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection

2.) Отредактируйте .xinitrc

В большинстве руководств по использованию .xinitrc предлагается добавить строку, подобную этой, для запуска выбранного рабочего стола при запуске Xorg:

exec cinnamon-session;

Однако в .xinitrc ] файл, все, что находится после оператора exec , игнорируется. Поэтому измените его так, чтобы просто вызывать рабочий стол без exec :

cinnamon-session;

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

cinnamon-session;
clear;

Из-за времени, затраченного на завершение сеанса, от завершения сеанса может остаться пара строк (и это то, что я имею в виду, когда говорю, что эта проблема все еще меня беспокоит; я не понял, чтобы решить эту часть полностью).

3.) Создайте сценарий оболочки для завершения сеанса

Я упоминал на шаге 1, что функция блокировки Xorg будет реплицирована другим способом, и это происходит здесь.Этот конкретный пример уникален для Cinnamon, но может быть аналогичная команда для вашего рабочего стола. Создайте сценарий оболочки со следующими двумя строками:

#!/usr/bin/env bash
cinnamon-session-quit --logout --force --no-prompt;

Сделайте сценарий исполняемым с помощью chmod + x quit-x.sh (или как вы его назвали). Причина, по которой мне пришлось сделать крошечный Сценарий оболочки для выполнения этой задачи вызван тем, что у меня были проблемы с сопоставлением комбинации клавиш с командой с параметрами, но сопоставить ее со сценарием было несложно (см. шаг 4).

4.) Сопоставьте сценарий с комбинацией клавиш

Это также сильно зависит от рабочего стола. Настройки для этого в Cinnamon находятся в приложении «Системные настройки» в разделе «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Щелкните «Добавить настраиваемый ярлык», дайте ему имя (например, «Выйти X»), присвойте ему ярлык (я выбрал Alt-T ) и укажите его на свой настраиваемый сценарий. Теперь перейти к терминалу совсем несложно.

7
21.04.2013, 14:15
3 ответа

обозначение (. *)

* в регулярных выражениях. * И * относятся к количеству, а не к символам, точнее, это означает ' ноль или более ». Кроме того, . означает «любой отдельный символ» .

Итак, когда вы сложите их вместе, вы получите «ноль или более любых символов» . Например, такие строки:

  • linux
  • linnnnnx
  • lnx
  • hi linux
  • lx

будут соответствовать . Последнее важно, оно показывает, что . * тоже ничего не может соответствовать.

обозначение (*)

Использование одного *, как я уже сказал, является счетчиком. Поэтому, когда вы ставите это после буквы, такой как 'l' , * означает 'ноль или более l' .

Обратите внимание, если мы введем grep для l * x , это будет соответствовать l ... x , но, вероятно, не по той причине, которую вы думаете.

% echo "l...x" | grep "l*x"
l...x

Соответствует завершающему «x». «L» не имеет ничего общего с тем, почему это выполняется, кроме того факта, что «x» предшествует «ноль или более l» .

12
29.04.2021, 00:49

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

Для регулярного выражения, с другой стороны, * , ? , {n, m} (диапазон вхождений) и + (только egrep ) сами по себе ничто. Они всегда относятся к предыдущему символу / атому - независимо от того, является ли это фактическим символом (например, L или 5 ), . (джокер), который может представлять любой символ, диапазон символов (например, [af] ) или шаблон из нескольких символов (только egrep; например, (abba) - где «abba» считается единицей). Таким образом, символы * и ? сами по себе ничего не представляют, а говорят о том, сколько раз предыдущий символ (который может быть шутником для любого или группы, рассматриваемой как единое целое) должен повторяется.

Если вы вспомните об этом различии между тем, как оболочка и регулярное выражение используют * и ? , оно должно встать на свои места.

Итак, для регулярного выражения:

  • . - представляет ровно одно вхождение любого символа
  • a..a - соответствует двум символам a с двумя символами любого вида между
  • . * - соответствует 0, 1 или более вхождениям любого символ
  • B * - соответствует 0, 1 или более вхождению «B»
1
29.04.2021, 00:49

Если вы хотите найти все, что начинается с «l» и заканчивается на «x», попробуйте регулярное выражение «l. * X». Здесь "." и «*» - специальные символы, представляющие один допустимый символ и символы не менее нулевой длины соответственно. Здесь перед "*" стоит ".", Так что все, что приходит на место "." повторяется в соответствии с определением "*", как указано выше.

1
29.04.2021, 00:49

Теги

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