розірвати нерозривне!

| комп'ютери, linux, підказки

здається, я таки навчився трішки користуватися sed’ом: з першого разу накидав команду, котра примусово вставляє розриви в надто довгі текстові рядки без пробілів, ігноруючи водночас текст з пробілами:
sed -e 's/\([^ ]\{39\}\)\([^ ]\)/\1 \2/g'
працює так: шукає нерозривний блок з 39-ти будь-яких символів окрім пробілу, за яким йде ще один не-пробіл (\([^ ]\))— і всталяє один пробіл перед цим останнім не-пробілом (\1 \2). g змушує повторювати операцію до кінця рядка.

отже, тепер можна позбутися головного недоліку попередньої версії sed-фільтра для форматування twitter-стрічки — і будь-якого іншого текстового потоку — для виводу на стільницю!

вся команда:
sed -e 's/^[^\t]*\t//;s/\t\t/› /;s/\t.*$//' -e 's/ \+/ /g' -e 's/$/ /g;s/http:[^ ]*[ ]/[↗] /g;s/ $//' -e 's/\([^ ]\{40\}\)\([^ ]\)/\1 \2/g' -e 's/^/♀/;s/$/♂/;s/♀*\( *.\{1,40\}\)[ ♂]/\1\n/g' -e 's/[[:space:]]$//'
перекомпонував трішки різні блоки. тепер послідовність операцій (кожен блок зі своїм -e) така:
  • у виводі twidge залишаємо лише відправника і текст;
  • якщо є кілька пробілів поспіль — скорочуємо до одного;
  • заміняємо гіперпосилання простим [↗];
  • якщо в тексті є нерозривні фрагменти, довші 40 символів — примусово розбиваємо пробілом;
  • розбиваємо текст на окремі рядки не довше 40 символів;
  • видаляємо зайвий символ переносу рядка наприкінці.
готово. очевидно, що для підготовки для виводу в conky довільного текстового файлу варто прибрати перший блок (який парсить специфічно вивід twidge), додавши блок для видалення пустих рядків і підчистки символів cr (на випадок текстів, згенерованих у dos/windows):
sed -e '/^[[:space:]]*$/d' -e 's/ \+/ /g;s/\x0D$//' -e 's/$/ /g;s/http:[^ ]*[ ]/[↗] /g;s/ $//' -e 's/\([^ ]\{40\}\)\([^ ]\)/\1 \2/g' -e 's/^/♀/;s/$/♂/;s/♀*\( *.\{1,40\}\)[ ♂]/\1\n/g' -e 's/[[:space:]]$//'
ну й наостанок скріншот, який показує, що ж я хочу отримати на стільниці після всього. скріншот «живий» — це те, що вже працює.


продовження буде!