Tuesday, February 22, 2011

Zamiana tekstu w BASH

Dziś na forum trafiłem na ciekawe pytanie, jak napisać skrypt, który posiada tablice wzorców oraz tablice zamienników tych wzorców i zamieni wszystkie wystąpienia wzorca w tekście. Skrypt trzeba napisać w powłoce Bash, co mnie zainteresowało, ponieważ zazwyczaj unikam programowania w nim.
Postanowiłem zmierzyć się z tym zadaniem i dosyć szybko (dzięki dokumentacji) udało mi się napisać taki skrypt.


array1=( a1 b1 c1 d1 )
array2=( A1 B1 C1 D1 )

text="aaaa  a1 bbbb  cccc c1"
echo ${text}
n=${#array1[@]}

for ((i = 0;i<n;i++))
do
text=$(echo -n "$text" |  sed "s/${array1[$i]}/${array2[$i]}/g")
done
echo -n "$text"

Skrypt wygląda delikatnie mówiąc brzydko, ale działa


grzesiek@home:~$ ./test.sh
aaaa a1 bbbb cccc c1
aaaa  A1 bbbb  cccc C1grzesiek@home:~$

Tak naprawdę całą robotę załatwia tu sed, jak zwykle zresztą :). Istotne jest też to, jak używać tablic w powłoce Bash (uuu tablice w Bash...) i jak tekst ze zmiennej przesłać z powrotem do tej zmiennej, tak aby przechodził prze sed.

No comments:

Post a Comment