Автор Гілка: uacomp -  sh/bash скриптик.  (Прочитано 3987 раз)

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
Для тит хто стягнув словничок з dict.linux.org.ua, але не використовує Kdict.
Простенький скриптик для оболонки для пошуку по словнику (нічого воєнного :)):

#!/bin/bash
# Шукає по словничку до тих пір, доки не введете 0 (нуль).
# Вкажіть шлях до власного словника:
DICT=~/dict/comp_ua.dict                        
#---------------------------
export GREP_COLOR="30;47"
x=1

echo -e "\e[30;47m--[en]--                              --[ua]-- \e[0m"
while [ "$x" != "0" ]; do
        echo -en "\e[1m"
        read x
        echo -en "\e[0m"
        clear
        egrep -i "^$x" $DICT  
        echo -e "\e[30;47m--[en]--                           --[ua]-- \e[0m"
        # можете додати grep --color
done

Пошук дуже простий. ^ початок лінії додано за замовчуванням, тобто шукає ваше слово напочатку лінії.
Якщо хочете щоб шукало посередині виразів, додайте крапку з зірочкою спереду: .*header.

Мені цікаво якщо хтось покращить цей скриптик, напише також Perl/Python варіант.
Що справді хочеться, так це щоби лінія вводу користувача не міняла своєї  позиції, щось
на зразок:

header
--[En]--                                           --[Ua]--
header label                           головна мітка
header label                           заголовок
header layout                         структура заголовка

Щось подібне написав і на C, можливо додам пізніше для критики.
« Змінено: 2005-08-05 19:04:39 від tech »

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
Re: uacomp -  sh/bash скриптик.
« Відповідей #1 : 2005-08-08 07:44:00 »
Цікаво, не знав як зробити щоб одночасно підраховувало результати egrep команди.
Сходив на comp.unix.shell, підказали такий трюк:

y=`egrep "^$x" $DICT | tee >(wc -l) 1>&2`

Для тих хто не знає, це розділює вивід,  перенапрявляючи stdout у іменований конвеєр для підрахунку, присвоюючи результат y змінній, а вивід на екран робиться завдяки stderr (1>&2).

Дещо змінений скриптик:

DICT=/some/dictionaryfile.txt
 x=1
while [ "$x" != "0" ]; do
        echo -en "\e[1m"
        read x
        echo -en "\e[0m"
        clear
        y=`egrep "^$x" $DICT | tee >(wc -l| sed 's/ *//') 1>&2`
        echo "---------------------------($y results)--"      
done

Відсутній 235

  • Кореспондент
  • ***
  • дописів: 238
  • Карма: +0/-0
Re: uacomp -  sh/bash скриптик.
« Відповідей #2 : 2005-08-10 22:17:17 »
чудові скрипти,
а чи не варто їх складати не в форум, хоча й відповідей-рецептів, а до docs.linux.org.ua, де вони будуть більш стуктуровані?
Олександр Приймак |  Google Web Toolkit

Відсутній miwa

  • Літератор
  • ******
  • дописів: 1111
  • Карма: +0/-0
Re: uacomp -  sh/bash скриптик.
« Відповідей #3 : 2005-08-11 10:23:02 »
Ну, сценарії, це все ж не документація, так що, НМД, тут вони більш доцільні, аніж на dlou.
Читайте документацію - вона кермує.

Відсутній 235

  • Кореспондент
  • ***
  • дописів: 238
  • Карма: +0/-0
Re: uacomp -  sh/bash скриптик.
« Відповідей #4 : 2005-08-16 23:31:56 »
та це ще більш походить на "як-це", а ніж на питання-відповіді. Краще то якось збирати й складати, а ніж пускати стрічкною в форумі.
IMHO скриптування й  unix не дуже далекі один від одного речі, варто й їх документувати також в одній купі.
Олександр Приймак |  Google Web Toolkit

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
Re: uacomp -  sh/bash скриптик.
« Відповідей #5 : 2005-08-17 07:37:00 »
Та ні, хлопці (скромно так), мої скрипти - це дитячий лепіт у порівнюванні з перлами які ви можете знайти у тому самому news:comp.unix.shell  або у Heiner's SHELLdorado. (Тим більше що він сируватий, не вловлює сигнали (функція trap)).
Хоча ідея непогана, зробити депозитарій різноманітних скриптів (sh/sed/awk, Perl, Python ...), тут, або де-інде. Впевнений що у багатьох знайдуться цікаві, корисні іншим кусочки, які вони один раз використали, а далі цей код просто лежить баластом на їхніх дисках.

(do you know what is the longest argument `cd' can take?)
i=0 ; while : ; do mkdir $i; cd $i ; ((i++)); done
« Змінено: 2005-08-17 09:02:58 від tech »