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