Толик Панков
hex_laden
............ .................. ................
Back February 12th, 2020 Forward
Аналог trim() в bash/linux shell

Преамбула


Пишу небольшой скрипт, для которого надо сохранять две выбранные пользователем при предыдущих запусках скрипта опции, а при следующих запусках их восстанавливать.
Решил воспользоваться самым простым методом. Создаем рядом со скриптом 2 файла, и туда сохраняем значения опций:

echo "$OPT1" > ./option1
echo "$OPT2" > ./option2


Некрасиво, но просто.

При запуске скрипта, читаем опции обратно:

OPT1=`cat ./option1`
OPT2=`cat ./option2`


На всякий случай лучше обрезать лишние пробелы или "пустые" символы типа TAB или переводов строки. Во всяком случае, так рекомендуют во всех руководствах по программированию, и обычно, в каждом современном языке, в некотором виде есть функция trim(), которая обрезает начальные и конечные пробелы.

Оказывается, что в bash можно обрезать не только начальные пробелы, но даже начальные и конечные пустые строки. Причем решается это одной командой.

Тестовый файл и вывод его в консоль


Возьмем, например, такой тестовый файл: На PasteBin

Если мы просто выведем его на консоль с помощью команды cat "trimtext.txt", то получится следующее:


smallwolfie@wolfschanze:~/myfiles/test/trim# ./testtrim


                   Trim()

smallwolfie@wolfschanze:~/myfiles/test/trim#


т.е. со всеми пробелами и пустыми строками.

Решение


Самая простая реализация trim() в shell/bash пропустить вывод команды через xargs без параметров. xargs, которая требует после себя команды, без указания команды все равно что echo без параметров. А echo без параметров все пустое обрезает.

#!/bin/bash

cat "trimtext.txt"|xargs


Вывод:

./testtrim
Trim()


Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2020/02/08/analog-trim-v-bash-linux-shell/

Tags: ,
Linux. Кодирование/декодирование файлов в/из BASE64

Преамбула


Как однажды сказал мой учитель, "линукс может все, а многое еще и из коробки, надо только знать как". Вот в данном случае именно так и оказалось. Понадобилось мне массово перекодировать файлы в/из BASE64.

BASE64 это такой древний формат данных, использующийся для передачи двоичных данных по сети. В век всеобщего юникода и кучи всякого софта это не так видно пользователю, но когда все только начиналось, с передачей данных была большая жопа. Даже на "железном" уровне некоторые машины поддерживали только семибитную кодировку, а уж о софте, не поддерживающем ничего кроме великого и могучего английского языка и говорить не приходится. Т.е. любой символ кроме букв английского алфавита и цифр мог быть либо выкинут к чертям собачьим, либо невозбранно использован как служебный. Соответственно, любой бинарный файл мог каким либо софтом, например, хитровыебанным почтовым сервером, разорван в клочья при передаче из пункта А в пункт Б.

Вот и придумали умные люди, а давайте все, что не влазит в английский алфавит и цифры, будем по хитрому алгоритму заменять, таки да. На английский алфавит и цифры. Так и получился BASE64. Подобная хрень в криптографии называется "транспортная броня".

Так вот, в Linux из коробки (входит в пакет Coreutils, который есть почти везде) есть утилита, способная кодировать/декодировать BASE64. Называется она, внезапно, base64.

Кодирование


Для опытов возьмем восьмибитного Сиро Исии. Он, когда живой был, много кого брал на опыты.



base64 isia.png >isia.b64

Закодированный Сиро Исии на Pastebin

Декодирование


base64 -d isia.b64 >isia.decoded.png

Тот случай, когда суть получилась короче преамбулы.

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2020/02/12/linux-kodirovanie-dekodirovanie-fajlov-v-iz-base64/

Tags: ,
Техническое

Свобода слова предполагает и право на нахуй. Потому во всех копиях наших блогов аноны закрыты. Редактора заебало вручную удалять оффтоп и спам. Тем не менее, мы всегда ответим на адекватные комментарии.

L.S., директор проекта

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2020/02/12/tehnicheskoe-2/

Back February 12th, 2020 Forward