Короче говоря, consolekit является сервисом, который отслеживает сеансы пользователя (т.е. где пользователь зарегистрирован). Это позволяет переключать пользователей, не выходя из системы (многие, пользователь может быть зарегистрирован на тех же аппаратных средствах одновременно с одним активным пользователем). Это также используется, чтобы проверить, "локальна" ли сессия т.е. если у пользователя есть прямой доступ к аппаратным средствам (который можно считать более безопасным затем удаленный доступ). Документация ConsoleKit.
PolicyKit позволяет подстроенные возможности в настольной среде. Традиционно только привилегированному пользователю (корень) разрешили настроить сеть. Однако, в то время как в серверной среде это - разумное предположение, что это также ограничило бы, чтобы не быть позволенным соединиться с горячей точкой на ноутбуке, например. Однако Вы все еще не можете хотеть давать полные полномочия этому человеку (как установка программ) или можете хотеть ограничить опции для некоторых людей (например, на Ваших дочерних ноутбуках, только 'доверил' сетям родительские фильтры, может использоваться). Насколько я помню, что это работает как:
РЕДАКТИРОВАНИЕ в настоящее время ConsoleKit в основном заменяется вошедшим, который является частью systemd, хотя существует автономная версия elogind.
Было бы легко с любым языком, где регулярные выражения способны к lookbehind. Конечно, Perl является первым в списке:
perl -pe 's/(?<!John\W)Smith/John/g' <<< "John Smith and Jane Johnson talk about Smith's car."
Слабое место имеет больше чем один несловесный символ между “John” и “Smith”. К сожалению, квантор как +
для \W
повысил бы “Переменную длину lookbehind не реализованная” ошибка.
РЕДАКТИРОВАНИЕ.. ре Ваш комментарий.. Вот новый сценарий, который не интересуется о (например). William Smith. Это временно запутывает шаблоны, которые это сохраняет как Smith (неизменным).
sed -r 's/\<(John) (Smith)\>/\1\x01x\2/g;
s/\<Smith\>/John/g; s/\x01x/ /g'
Если Вы обеспокоены г-ном г-на г-жу... затем это работает.
sed -r 's/\<(John|((M(r|rs|s))\.?)) (Smith)\>/\1\x01x\5/g
s/\<Smith\>/John/g; s/\x01x/ /g'
Можно обслужить William путем добавления его имени к или список, например.
sed -r 's/\<(William|John|...
Это - orginal сценарий
sed -r 's/(^|[[:punct:]] |\<[a-z]+ )(Smith\>)/\1John/'
sed -r 's/([^John] )Smith/\1John/g;s/([^Jane] )Johnson/\1Jane/g'
() получит non-Firstname перед LastName, таким образом, они - backref'd в замене.
Править
@manatwork, gilles
Вы правы. Как насчет
sed -r 's/(John Smith)/temp1/g;s/Smith/John/g;s/temp1/John Smith/g'
Это, кажется, добивается цели.
[^John]
соответствия один символ, который должен быть одним из J
, o
, h
или n
. Я сомневаюсь, что это - то, что Вы предназначили. Нет никакой конструкции отрицания в регулярных выражениях (Perl имеет (?!…)
и (?<!…)
, но если Вы будете думать о нем как об отрицании, то это, вероятно, не сделает то, что Вы ожидаете).
– Gilles 'SO- stop being evil'
06.11.2011, 18:54
sed
без него делает для чрезмерно увеличенной в размерах sed логики... temp1
будет почти всегда прекрасен, но! не упустите ту шину. Для смягчения этой возможности я полагаю, что лучше использовать символы, которые (почти) никогда не происходят в текстовых файлах Латинского Сценария, например, Шестнадцатеричном \x01 \x02 значения, или комбинациях их или возможно локали \xe188b4 UTF-8 (ሴ - ЭФИОПСКИЙ СЛОГ ВИДИТ).. например. echo -e 'Z' |sed 's/./\xe1\x88\xb4/'
=> ሴ
когда локаль является UTF-8..
– Peter.O
07.11.2011, 05:00