Для этого вам придется создать свою собственную пользовательскую политику в каталоге создайте mylocalpolicy.te
со следующим содержанием:
policy_module(mylocalpolicy, 0.0.1)
type test_type_t;
files_type(test_type_t)
Затем вы можете запустить в том же каталоге: make -f /usr/share/selinux/devel/Makefile
. Это создаст .pp файл, который вы можете загрузить с помощью semodule -i mylocalpolicy.pp
Пожалуйста, обратите внимание, что ничто не сможет взаимодействовать (читать/писать/удалять/...) с файлами с такой меткой.
Следующий скрипт perl
выводит ваш входной файл ( markizy.txt
) в формате с разделителями табуляции, поскольку внутри полей есть пробелы.
#!/usr/bin/perl
while(<>) {
chomp;
s/ +(vsan|fcalias|pwwn) */\t$1 /g ;
s/ +\t/\t/;
if ($. > 1 && m/^zone name/) {
print $l,"\n";
$l = $_;
} elsif (eof) {
$l .= $_;
print $l,"\n";
} else {
$l .= $_;
};
};
Встроенная переменная perl
$.
- это номер текущей строки, поэтому сценарий избегает печати (пустая строка), когда имя зоны
находится в первой строке ввода. См. man perlvar
для получения подробной информации об этой и многих других переменных (и их длинных псевдонимах, таких как $ INPUT_LINE_NUMBER
для $.
).
Сохраните его в файл, сделайте его исполняемым с помощью chmod + x
и запустите. например с cat -T
для отображения вкладок ( ^ I
):
$ ./markizy.pl markizy.txt | cat -T
zone name Zone1_HOSTNAME01^Ivsan XXX^Ifcalias name STORAGEPORT_0^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx^Ifcalias name STORAGEPORT_1^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx^Ifcalias name STORAGEPORT_2^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx
zone name Zone2_HOSTNAME02^Ivsan XXX^Ifcalias name STORAGEPORT_3^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx^Ifcalias name STORAGEPORT_4^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx^Ifcalias name HOSTNAME02^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx
Канал к cat -T
предназначен только для того, чтобы показать вам, что на выходе поля, разделенные табуляцией (в противном случае они не сильно отличаются от пробелов). Не используйте его при запуске по-настоящему, просто перенаправьте в файл.Excel (или gnumeric
или Libre Office Calc
или почти любая другая электронная таблица) не должно испытывать затруднений при импорте текстового файла с разделением табуляцией - это стандартная возможность почти столько, сколько я могу помнить.
Запустите его как:
./markizy.pl markizy.txt > markizy.csv
Возможно, вам придется сообщить Excel, что данные разделены табуляцией, а не запятыми при импорте, или он может обнаружить этот факт сам.
В качестве альтернативы, если вы абсолютно уверены, что ни одно из полей данных не будет содержать запятых, замените все \ t
в скрипте запятыми, и вы получите разделение запятыми.
Возможно, в конечном итоге будет проще выполнить всю работу в Excel. Я вырезал и вставил ваш пример в текстовый файл, открыл его в Excel и получил следующее:
Оттуда вы можете использовать команду глобального поиска и замены для внесения любых изменений, которые вам могут понадобиться.
Казалось очевидным, что некоторые поля могут быть опущены, поскольку они будут учтены в строках, которые я создам в Excel после импорта отсортированных данных. Я уверен, что есть гораздо лучшие варианты, но это заняло весь мой вывод, поместило все значения в порядок в новой строке, а затем удалило ненужные поля для vsan | pwwn | 'zone name' | fcalias и оставило меня с только псевдонимы зоны и участников вместе с записями pwwn. Поскольку все зоны начинались с верхнего регистра Z, это также упростило задачу.
Код, который я использовал в одном лайнере, был:
grep -oP '\S+' switch01-zones-20160711 | grep -Ev 'name|vsan|^01|^02|fcalias|pwwn|zone' | awk '{printf "%s%s", (/^Zone/?rs:FS), $0; rs=RS} END{print ""}' >to-import.csv
это оставило мне красивую единственную строку для каждой Зоны и псевдоним участника с подключенным устройством www. Он также был импортирован в Excel для построения строк и всего за несколько секунд. моменты.