Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Peter Fodrek 13. 09. 2021, 21:39:10
-
Vážené kolegyne, vážení kolegovia!
V skripte potrebujem volať v bash scripte
sed -e 's/file.cvs/$1/g'
a nejako sa mi nedarí sa mi nastaviť to tak, aby ten prvý parameter bol prebraný zo skriptu
nevyzerá, že by fungovalo
sed -e 's/file.cvs/'$1'/g'
nevie mi niekto poradiť prečo?
Ďakujem
-
Proměnná v '' se neexpanduje, použij "".
-
Jednoduche uvodzovky sposobuju, ze sa ich obsah neexpanduje.
Skusal si namiesto `sed -e` dat kvoli debugu `echo`?
Kazdopadne, druha moznost funguje ked $1 neobsahuje medzery. S medzerami je stale moznost ukoncit jednodnoduche uvodzovky a dat $1 do dvojitych. Teda napr:
sed -e 's/file.cvs/'"$1"'/g'
alebo pouzit komplet dvojite uvodzovky.
Pozor na to, ze $1 moze obsahovat aj ine kontrolne znaky; tu typicky lomitka alebo & (expanduje sa na vsetko).
-
Double quota Do Dollar substitution
Single quota Supress Substitution
-
nevyzerá, že by fungovalo
sed -e 's/file.cvs/'$1'/g'
nevie mi niekto poradiť prečo?
zkuste vytisknout. jestli tam nahodou neni mezera
echo 's/file.cvs/'$1'/g'
-
Jednoduche uvodzovky sposobuju, ze sa ich obsah neexpanduje.
Skusal si namiesto `sed -e` dat kvoli debugu `echo`?
Kazdopadne, druha moznost funguje ked $1 neobsahuje medzery. S medzerami je stale moznost ukoncit jednodnoduche uvodzovky a dat $1 do dvojitych. Teda napr:
sed -e 's/file.cvs/'"$1"'/g'
alebo pouzit komplet dvojite uvodzovky.
Pozor na to, ze $1 moze obsahovat aj ine kontrolne znaky; tu typicky lomitka alebo & (expanduje sa na vsetko).
veď práve sú tam zátvorky
-
sed -e 's/file.cvs/$1/g'
ja bych na to sel asi takto:
dst=`echo "$1" | sed 's/#/\\#/g'`
sed 's#file[.]cvs#'"$dst"'#g'
Prvni radek escapuje ridici znak pro regex sedu.
Druhy radek je jemne upraven, protoze jsi myslel tecku a ne jakykoliv znak, ne?
Ten # neni uplne ideal, protoze nektere odflakle syntax highlightery to pomate.. ale to uz neni muj problem.
Pozor na apostrof a uvozovky, at ti to nemeni editor nebo copy-paster autocorrect na spodni/horni unicode uvozovky.
-
veď práve sú tam zátvorky
zavorky se escapovat nemusi...
ackoliv pri sedu s promenejma to davam vzdy cele do dvojitejch, koukam ze tvuj zapis (cele v jednoduchejch ale zaroven jednoduche pred a za promenou) take funguje...
ten preklep CSV Vs CVS mas jen v dotazu, nebo i v tom skriptu? ;-) protoze tohle funguje:
$ neco="(a)[b]{c}"; echo "123 file.csv 456" | sed -e 's/file\.csv/'${neco}'/g'
123 (a)[b]{c} 456
pokud by v promene byl ocekavan i znak(y) & tak to lze escapovat primo (v pripade bash) "zmanipulovanim" obsahu promene (https://tldp.org/LDP/abs/html/string-manipulation.html)
$ neco="(a)&[b]&{c}"; echo "123 file.csv 456" | sed -e 's/file\.csv/'${neco//&/\\&}'/g'
123 (a)&[b]&{c} 456
EDIT: upraveno dle dobre pripominky RDa v sed paternu file.csv => file\.csv ;-)
-
Ďakujem všetkým
-
Koukam ze je toho vic co je treba nahradit v nahrade - https://stackoverflow.com/a/407649
Krome viditelnych oddelovacich znaku (bezne /, u me #), je to i \ a &
-
Koukam ze je toho vic co je treba nahradit v nahrade - https://stackoverflow.com/a/407649
Krome viditelnych oddelovacich znaku (bezne /, u me #), je to i \ a &
Nakoniec bola chyba v tom, že v $1 bola cesta ./ZH...........
tak som radšej pridal druhý parameter, ktorý je bez ./ a už to ide