Couting все символы классом символов Bash

Запуск кота должен быть сделан в init-сценарии. Если Вы хотите дать группу пользователей, право на (ре) запускает кота, добавляет строку к использованию/etc/sudoers visudo. Это могло быть похожим:

%tomcatcontrol localhost = NOPASSWD : /etc/init.d/tomcat *

Замените localhost названием Вашей машины. Затем каждый пользователь группы tomcatcontrol сможет выйти:

sudo /etc/init.d/tomcat restart (или состояние или остановка, или запускается).

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

Что касается Ваших псевдонимов - я думаю, что OpenSuSE имеет/etc/profile.local с этой целью: Там можно поместить материал, который должен быть допустимым для каждого пользователя.

2
23.07.2013, 03:00
3 ответа
file=myfile
for class in alnum alpha blank cntrl digit graph lower print punct space upper xdigit
do
  printf '%7s: %d\n' "$class" "$(tr -Cd "[:${class}:]" < "$file" | wc -m)"
done

ascii и word не классы стандартного символа и bash конкретный. word alnum плюс подчеркивание, и ascii символы от 0 до 127, таким образом, можно сделать:

printf '%7s: %d\n' word "$(tr -Cd "_[:alnum:]" < "$file" | wc -m)"
printf '%7s: %d\n' ascii "$(LC_ALL=C tr -cd '\0-\177' < "$file" | wc -c)"

(обратите внимание что реализация GNU tr, с coreutils-8.22, не будет работать с многобайтовыми символами).

2
27.01.2020, 22:06
  • 1
    word не синонимично с alnum – “_” word но не alnum. pastebin.com/raw.php?i=czZcwix0 –  manatwork 23.07.2013, 10:47
  • 2
    @manatwork ответа Вы правы. Проверяя код удара, это действительно alnum + _, ответ, исправленный соответственно. –  Stéphane Chazelas 23.07.2013, 11:44

Походит на забавный класс!Что это?

Это получит Вас большая часть пути там; sed, кажется, не поддерживает: ASCII: или: слово: но:

for f in alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
do
  echo "$f: $(sed s/[^[:$f:]]//g b.txt | tr -d '\n' | wc -c)"
done

Где мы используем sed для разделения всего кроме символов, мы заботимся о, затем удаляем все пустые строки и просто получаем количество перенесенных символов.

Должно быть относительно точным, за возможным исключением +/-1 или off-by-a-factor-of-ten ошибки.

1
27.01.2020, 22:06
  • 1
    Это не работает на cntrl или space так как Вы исключаете символы LF. В зависимости от sed реализация, символы NUL могут быть проблемой также. –  Stéphane Chazelas 23.07.2013, 11:51
[

]Я не буду искать, какие символы подходят к какому классу - вероятно, вы сможете это выяснить и/или просто посмотреть другие ответы. Но это даст вам однозначное представление о характере вашего файла по символам, не пропустив ни одного:[

] [
 _c2o() { od -A n -t o1 -w1 -v | tr -dc '0-9\n' ; } 
 _c2o <file
 163
 150
 072
 040
 167
 141
 162
 156
 151
 156
 147
] [

]Это функция, которую я использую во множестве различных способов. Каждая строка представляет собой один кусочек, выраженный в восьмеричном формате - хотя []od[] очень настраиваемый. Но таким образом вы можете очень просто []grep[] или []sed[] для своих целевых значений и реализовать счетчик строк. Это действительно кусок пирога. И это очень быстро.[

] [

]Хорошо, итак, я все равно сделал классы:[

] [
_classes() { set -- ${classes=alnum alpha blank cntrl digit graph lower print punct space upper xdigit}
        while ${1+:} false ; do
                printf %b $(printf '\\%04o\n' $(seq 0 127)) |
                tr -dc "[:${1}:]" | {
                        printf "$1='"
                        _c2o
                        printf "'\n"
                } ; shift
        done
}
] [

]Запустите выше и вы получите вывод типа:[

] [
xdigit='060
061
062
063
064
065
066
067
070
...
'
] [

]Отсюда я представляю себе что-то вроде:[

] [
eval "$(_classes)"
for class in $classes ; do
    eval "$class=\$(_c2o <file | grep -c -F "$class")"
done
] [

]Нужно разобраться с этим немного лучше - но это почти делает всю работу.[

]
0
27.01.2020, 22:06

Теги

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