Обратный порядок пар строк текстового файла

Если кто-то может запускать произвольные команды от имени пользователя root, он может переключиться на любую учетную запись пользователя, чтобы он мог делать все, что может делать этот пользователь.

На практике у вас есть три варианта.

  • Привилегированные пользователи должны выполнять только очень специфические задачи. Тогда позвольте им запускать только некоторые определенные команды с помощью sudo. Это безопасно, только если эти команды не позволяют «экранировать оболочку», т.е. если нет возможности использовать эти команды для выполнения других программ. Например, управление пакетами (разрешающее sudo apt-get install… ) часто позволяет экранировать оболочку, вводя команды внутри пакета (это может быть нормально, если сигнатуры пакетов проверены должным образом из известных источников).
  • Привилегированным пользователям нужны административные полномочия, но они не нужны им на «реальном» компьютере, все, что им нужно, - это иметь их на каком-то компьютере (например, для игры с настройками сети). Затем создайте виртуальные среды (например, виртуальную машину, контейнер lxc или специальное пространство имен Linux) для привилегированных пользователей и не делайте данные других пользователей доступными в виртуальных средах.
  • Используйте социальные, а не технические средства контроля: дайте пользователям широкие права, но дайте им знать, что любое нарушение конфиденциальности будет строго пресечено.Часто это нормально, если пользователи являются сотрудниками, но это зависит от того, насколько конфиденциальны данные.
1
11.01.2017, 15:28
4 ответа
echo '#EXTM3U';grep -v ^#EXTM3U m3u |sed 'N;s/\n/ /'|sed -e 's/\(.*\)\(http.*\)$/\2\n\1/'|tac 
0
27.01.2020, 23:34

Я бы распечатал заголовок, поменял местами строки в каждой паре, а затем все полностью изменил:

{ head -n 1; { sed -n 'h;n;G;p' | tac; } ; } < infile

Попробуйте tail -r , если tac недоступен в вашей системе. Кроме того, в некоторых настройках это не сработает, потому что их голова тупая, а не соответствует стандартам - другой быстрый способ сделать это - через sed q :

{ sed q; { sed -n 'h;n;G;p' | tail -r; } ; } < infile
2
27.01.2020, 23:34

Есть более короткое решение, без tac, но только с headиsed:

$ head -n 1 f;sed -n '1!{N;2,3!G;h;$p}' f;
#EXTM3U
#EXTINF:-1,AL: TV Uskana
http://mydomain.org:8000/live/username/mypass/8.ts
#EXTINF:-1,AL: Top Channel Beckup
http://mydomain.org:8000/live/username/mypass/7.ts
#EXTINF:-1,AL: Top Channel HD
http://mydomain.org:8000/live/username/mypass/6.ts
#EXTINF:-1,AL: Top Channel SD
http://mydomain.org:8000/live/username/mypass/5.ts
#EXTINF:-1,AL: Klan Kosova (B)
http://mydomain.org:8000/live/username/mypass/4.ts
#EXTINF:-1,AL: Klan Kosova
http://mydomain.org:8000/live/username/mypass/3.ts
#EXTINF:-1,AL: Klan HD Beckup
http://mydomain.org:8000/live/username/mypass/2.ts
#EXTINF:-1,AL: Klan HD (AL)
http://mydomain.org:8000/live/username/mypass/1.ts
0
10.10.2021, 14:56

Использование Raku (, ранее известного как Perl _6)

raku -e '.join("\n").put for lines.rotor(2).reverse;'

Образец ввода:

#EXTINF:-1,AL: Klan HD (AL)
http://mydomain.org:8000/live/username/mypass/1.ts
#EXTINF:-1,AL: Klan HD Beckup
http://mydomain.org:8000/live/username/mypass/2.ts
#EXTINF:-1,AL: Klan Kosova
http://mydomain.org:8000/live/username/mypass/3.ts
#EXTINF:-1,AL: Klan Kosova (B)
http://mydomain.org:8000/live/username/mypass/4.ts
#EXTINF:-1,AL: Top Channel SD
http://mydomain.org:8000/live/username/mypass/5.ts
#EXTINF:-1,AL: Top Channel HD
http://mydomain.org:8000/live/username/mypass/6.ts
#EXTINF:-1,AL: Top Channel Beckup
http://mydomain.org:8000/live/username/mypass/7.ts
#EXTINF:-1,AL: TV Uskana
http://mydomain.org:8000/live/username/mypass/8.ts

Пример вывода:

#EXTINF:-1,AL: TV Uskana
http://mydomain.org:8000/live/username/mypass/8.ts
#EXTINF:-1,AL: Top Channel Beckup
http://mydomain.org:8000/live/username/mypass/7.ts
#EXTINF:-1,AL: Top Channel HD
http://mydomain.org:8000/live/username/mypass/6.ts
#EXTINF:-1,AL: Top Channel SD
http://mydomain.org:8000/live/username/mypass/5.ts
#EXTINF:-1,AL: Klan Kosova (B)
http://mydomain.org:8000/live/username/mypass/4.ts
#EXTINF:-1,AL: Klan Kosova
http://mydomain.org:8000/live/username/mypass/3.ts
#EXTINF:-1,AL: Klan HD Beckup
http://mydomain.org:8000/live/username/mypass/2.ts
#EXTINF:-1,AL: Klan HD (AL)
http://mydomain.org:8000/live/username/mypass/1.ts

Преимущество Raku в том, что он поддерживает Unicode из -из -в поле -, поэтому приведенный выше код Raku должен иметь возможность обрабатывать как m3u, так иm3u8(списки воспроизведения Unicode )с никаких трудностей.

Не обращая внимания на первую строку (" #EXTM3U" )на данный момент, код Раку довольно прямолинеен -. Строки в (читаются лениво ),rotor-объединяются парами, упорядочены в обратном порядке -и печатаются с символом новой строки \nв -между каждой парой.

[Единственное, что нужно помнить с rotor, это то, что он будет молча удалять элементы в конце, если #элементов (недостаточно, например. строки )для завершения rotor«набора». Если вы хотите сохранить неполные «наборы» в конце, используйте batchвместо rotor].

Ах да, насчет начальной #EXTM3Uстроки :в Раку, наверное, проще всего вставить вызов .skip(1)после lines, но до .rotor, и добавить эту строку #EXTM3Uобратно вручную в конец.

https://raku.org

0
12.10.2021, 23:25

Теги

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