LINUX.ORG.RU

BASH автозамена текста

 ,


0

1

Ребят, как на Баше сделать автозамену текста. Так например есть масив:

Новости
Дети
Наука
и есть сопоставленный масив
1
2
3
Требуется функция подменяющая слово из первого масива цифрой из второго. Помогите, плз.

Ответ на: комментарий от GrafAtRuss
a=(Новости Дети Наука)
b=(1 2 3)
echo "a = ${a[@]}"
echo "b = ${b[@]}"
echo "Changing..."
for i in $(seq 0 ${#a[@]}); do
    a[${i}]=${b[${i}]}
done
echo "a = ${a[@]}"
a = Новости Дети Наука
b = 1 2 3
Changing...
a = 1 2 3

Так подходит?

sT331h0rs3 ★★★★★
()
Последнее исправление: sT331h0rs3 (всего исправлений: 1)
Ответ на: комментарий от sT331h0rs3

А возможно из этого сделать некую функцию??? Например с результатом (ориентируюсь по php):

echo testfunc(Новости)
echo testfunk(Дети)
echo testfunk(Наука)
1
2
3

GrafAtRuss
() автор топика
Ответ на: комментарий от GrafAtRuss

Я не очень понимаю, что нужно. Если есть 2 массива как аргументы функции, то функция должна поменять 1 на другой что ли?

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от GrafAtRuss
#/bin/bash
change() {
    a=(Новости Дети Наука)
    b=(1 2 3)
    for i in $(seq 0 ${#a[@]}); do
        if [ "$1" == "${a[i]}" ]; then
            echo "${b[i]}"
            exit 0
        fi
    done
    exit 1
}

echo $(change Новости)
echo $(change Дети)
echo $(change Наука)
echo $(change Блаблабла)
1
2
3

Примерно так?

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от sT331h0rs3

Обалдеть. А что такое «a[@]»? Это конечно не мое дело, но по-моему это немного не та задача. В твоем коде, если я правильно понял, просто первое слово заменяется на 1, второе на 2 и т.п. А в условии предлагалось все вхождения «Новости» заменить на 1, не зависимо от порядка.

hotpil ★★★★
()
Ответ на: комментарий от hotpil

Почитай обсуждение выше. Про a[@] - это весь массив. ${#a[@]} - длина.

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от emulek

Осталось только понять, почему нелишний твой комментарий, и почему у тебя истерика на ровном месте.

aedeph_ ★★
()
Ответ на: комментарий от hotpil

А в условии предлагалось все вхождения «Новости» заменить на 1, не зависимо от порядка.

Да именно так. Я просто еще не опробовал код выше.

GrafAtRuss
() автор топика

perl -Mutf8 -e '@a = (Новости, Дети, Наука); @b = (1, 2, 3);foreach(0 .. $#a){$h{@a[$_]}=@b[$_];}; print $h{Наука}.«\n»;'

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.