Intereting Posts
Помимо Alt + Shift для переключения раскладки клавиатуры, любых других комбинаций клавиш Xorg? Переключатель задач внутри VNC Как написать точно скрипты bash в Make-файлы? Логика соответствия шаблону оболочки Экспортировать комментарии только от Okular Pdf-reader (спутывание) Как определить битту оборудования и ОС? Должны ли операнды к утилите всегда появляться после всех параметров утилиты? Обнаружение общих строк в двух файлах с использованием 4 полей с использованием awk и UNIX Что делает строка `set – $ args` и почему она ведет себя по-разному между Zsh и Bash? Есть ли способ синхронизировать уведомления между рабочим столом Linux и iOS? Как избавиться от панели * Personal File Sharing * в Наутилусе? Как разбить каталог файлов на подкаталоги Как я могу использовать установленный раздел / диск Arch как физический диск VMWare на виртуальной машине? Есть ли способ выйти из «меньше» без очистки экрана? Ограничить содержимое веб-сайта, которое будет загружено за одну минуту с одного IP-адреса (с помощью iptables)

Разнообразные форматированные разрешения

У меня проблема, с которой я некоторое время стучала головой, я делаю короткий простой анализатор bash и пытаюсь извлечь 3 вещи из многих строк и поместить их в недавно сформированные переменные. все они отформатированы, как показано ниже:

ownername:read write execute groupname:read execute all:none sticky 

Я пытаюсь вытащить каждую часть в переменные, как показано ниже:

Владелец (первый блок)

OWNER=$(ownername)

Группа (второй блок)

GROUP=$(groupname)

и, наконец, разрешения (все блоки, но с именем пользователя / groupname заменены владельцем и primary_group)

PERMISSIONS=$(owner:read write execute primary_group:read execute all:none sticky)

Сначала это казалось довольно простой задачей, однако, пытаясь справиться с этим, мои основные знания awk сложны, так как некоторые области могут быть rwx, а другие rw / ro, а также владелец / группа не являются уникальными (не позволяя простой sed)

Какие первые шаги я могу предпринять для этого?

Проще говоря:

Входные данные:

 ownername:read write execute groupname:read execute all:none sticky 

Вывод:

 OWNER=ownername GROUP=groupname PERMISSIONS=owner:read write execute primary_group:read execute all:none sticky 

Я думаю, вы хотите разбить входные части на части, в которых есть одно слово, двоеточие, затем несколько других слов. Было бы проще, если бы разделы были разделены, но вы могли бы, например, добавить разделители с чем-то вроде этого:

 echo "ownername:read write execute groupname:read execute all:none sticky" | \ sed -e 's/\w\w*:/;&/g' ;ownername:read write execute ;groupname:read execute ;all:none sticky 

Разделение на точки с запятой должно быть выполнимым.

Обязательный фрагмент Perl, разделяющий части непосредственно на массив:

 echo "ownername:read write execute groupname:read execute all:none sticky" | \ perl -ne '@a = split/ (?=\w+:)/; print "$_\n" for @a' ownername:read write execute groupname:read execute all:none sticky