sed — a sedgy seductrice

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

от же ж бісів sed! гризу його,
гризу — а воно ж огризається =/

twitter

учора не виспався: пізно вклався, а ще вікно залишив закритим (комунальники чудово підготувалися до холодів: не включили опалення, ще й гарячу воду відключили, бо щось десь поламали); над ранок голова була важка, як сніп.

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

по-перше, twidge (консольний twitter-клієнт для linux) забезпечує завантаження останніх 20 твітів зі стрічки:
twidge lsarchive -l

ключик -l видає «довгий» формат — п’ять полів, розділених табуляцією (тут третє пусте):
126549795966955521    tivasyk        визначення sedust в urban dictionary порвало на шмаття =) http://t.co/EBC28yF7    Wed Oct 19 06:46:37 +0000 2011
126406168645074944    tivasyk        от же ж бісів sed! гризу його, гризу — а воно ж огризається =/    Tue Oct 18 21:15:53 +0000 2011
далі sed, порціонально. ось так прибираю ідентифікатор на початку рядка разом із наступним символом табуляції:
sed -e 's/^[^\t]*\t//'
залишившши tivasyk, видаляю дві табуляції поспіль (щоправда, тут припускаю, що більше такі пари ніде не повторюються, що, в принципі, не гарантовано… але наразі працює) і додаю розділювач:
sed -e 's/\t\t/› /'
видаляю увесь останній блок з датою/часом публікації (знову-таки, з припущенням, що він таки останній):
sed -e 's/\t.*$//'
про всяк випадок скорочую дубльовані пробіли, якщо знайдуться:
sed -e 's/ \+/ /g'
нарешті заміняю гіперпосилання (навіщо вони у виводі conky на стільниці, де їх не можна клікнути?) позначкою [↗]; попередньо додаю пробіл в кінець рядка (щоби правильно впізнати посилання між http:// і найближчим пробілом), а по завершенні видаляю його, якщо виявився непотрібним:
sed -e 's/$/ /g;s/http:[^ ]*[ ]/[↗] /g;s/ $//'
лишається об’єднати всі команди в один рядок:
twidge lsarchive -l | sed -e 's/^[^\t]*\t//' -e 's/\t\t/› /' -e 's/\t.*$//' -e 's/ \+/ /g' -e 's/$/ /g;s/http:[^ ]*[ ]/[↗] /g;s/ $//'
…і отримати на виводі таке:
tivasyk› визначення sedust в urban dictionary порвало на шмаття =) [↗]
tivasyk› от же ж бісів sed! гризу його, гризу — а воно ж огризається =/
втім, ще не все — хочеться розбити тепер довгі рядки на фрагменти не більше 50 символів. з цим проблема: не второпаю дібрати правильний набір команд для sed’а. хто дружить із цією sedgy seductriceпідкажіть варіант?

оновлення. здається, впорався: читайте, як.

p.s. так, я знаю, звідки скріншот. поставив свідомо — по-перше, пасує до заголовка (вміст) і тексту (форма); по-друге, великоднє яєчко назло нацкомісії з моралі.