Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Vojtěch Trefný 01 Května 2012, 10:26:46
-
Potřeboval bych poradit s následujícím problémem:
Mám proměnné search1 až searchN a replace1 až replaceN (obsahující řetězce pro vyhledání a nahrazení v souboru), ale když nacpu sed do for cyklu (abych nemusel jak *censored* vypisovat N-krát stejný příkaz), tak se mi to nějak nechytá.
for i in {1..N}
do
sed -i 's/'"$search$i/$replace$i"'/g' $soubor
done
-
možná se odpověď skrývá zde:
http://linuxzone.cz/modules/tisk_clanku-nw.phtml?ids=9&idc=524 (http://linuxzone.cz/modules/tisk_clanku-nw.phtml?ids=9&idc=524)
-
V těch uvozovkách by to být nemělo, ty tam mám takhle pochybně udělaný proto, že v těch proměnných jsou občas nějaké pochybné znaky, které potřebuju tak, jak jsou. A navíc samotné "sed -i 's/'"$search1/$replace1"'/g' $soubor" funguje správně.
-
Problém je v expandování těch proměnných, zkus si
>$ s1=aa
>$ i=1
>$ echo $s$1
1
expandují se postupně a tak dostaneš řetězec $s + $i a jelikož je $s nedefinovaný, dostaneš ve výsledku jen $i.
Použij pole.
-
GdH: Taky mě nakonec napadlo si to vyzkoušet, ale nakonec mě jmp trochu nakopnul správným směrem a výsledek je prasokód, ale funkční prasokód :)
for i in {1..9}
do
eval pom1=`echo '$search'$i`
eval pom2=`echo '$replace'$i`
sed -i 's/'"`echo $pom1`/`echo $pom2`"'/g' $soubor
done
-
jmp@ic-q180:~/tst$ cat tst
#!/bin/bash
srch="AA"
rpl="BB"
for i in {1..5}
do
echo 's/'"$srch$i/$rpl$i"'/g'
done
jmp@ic-q180:~/tst$
jmp@ic-q180:~/tst$ ./tst
s/AA1/BB1/g
s/AA2/BB2/g
s/AA3/BB3/g
s/AA4/BB4/g
s/AA5/BB5/g
jmp@ic-q180:~/tst$