Что Вы описали,
это действует как интерфейс между конечным пользователем и базовым диспетчером пакетов низкого рычага
немного походит на PackageKit мне, то есть,
PackageKit является системой, разработанной для создания установки и обновления программного обеспечения на компьютере легче. Основная цель дизайна состоит в том, чтобы объединить все программное обеспечение графические инструменты, используемые в различных дистрибутивах, и использовать часть новейшей технологии как PolicyKit, чтобы заставить процесс высосать меньше.
Править: Посмотрите здесь для списка поддерживаемых бэкендов. Edit2: Удаленный бесполезный комментарий.
Вам нужно что-то более мощное, чем традиционные подстановочные знаки оболочки. В ударе, набор extglob
опция, которая предоставляет Вам доступ к регулярным выражениям в шаблонах шарика через необычный синтаксис, наследованный от ksh.
shopt -s extglob
sanitized=${raw//+([^A-Za-z0-9])/-}
tr
хороший инструмент для этого задания
new=$( printf "%s" "$t" | tr -cs 'a-zA-Z0-9' '-' )
new=${new#-}; new=${new%-}
tr
... Однако я пытался сделать его в Bash, иначе я пойду с sed
: echo "$t" | sed -r 's/[^A-Za-z0-9]+/-/g'
– neurino
31.10.2011, 20:07
Если Вы хотите остаться с чистым ударом, необходимо будет согласиться на решение с двумя передачами. Строковые замены Bash используют шарики, как в расширении пути и не регулярных выражениях. Единственные специальные символы в шариках *
, ?
, и []
, чьи грубые эквиваленты в регулярных выражениях .*
, .
, и []
. Смотрите на Wooledge вики и bash(1)
страница справочника разделяет на Parameter Expansion
и Pathname Expansion
для большего количества информации.
Так же, как комментарий расширение с двумя передачами в чистом ударе, все еще, вероятно, будет быстрее, чем попытка сделать то же самое путем вызова внешней программы, таким образом, я не волновался бы об этом слишком много.
shopt -s extglob; t="${t//+([^A-Za-z0-9])/-}"
– Peter.O
31.10.2011, 04:19
shopt
и который окружает, поддерживают его. – neurino 01.11.2011, 13:41shopt
характерно для удара. Синтаксис шаблона, который это включает, всегда доступен во всех ksh вариантах. В zsh с этим синтаксисом нужно включитьsetopt ksh_glob
. POSIX не имеет такой функции, ее подстановочные знаки менее мощны, чем regexps. Оболочки кроме bash/ksh/zsh, который на практике главным образом означает пепел в наше время, имеют тенденцию придерживаться подстановочных знаков POSIX. – Gilles 'SO- stop being evil' 01.11.2011, 15:53echo "$t" | sed -r 's/[^[:alnum:]]+/-/g; s/^-|-$//'
. Я принимаю Ваш ответ, поскольку он точно делает то, что спросило рассматриваемый. – neurino 01.11.2011, 22:44${var/PATTERN/REPLACEMENT}
конструкция также характерна для ksh/bash/zsh. – Gilles 'SO- stop being evil' 01.11.2011, 23:07sed
поскольку я знаю лучше его синтаксис и поведение, я могу легко добавить оператор для удаления запускающих/запаздывающих тире, я не должен заботиться о\n
символ.sed
путь, менее доступный, чемtr
? – neurino 01.11.2011, 23:12