Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Peter Fodrek 13. 09. 2021, 21:39:10

Název: $1 z bash skriptu do sed
Přispěvatel: 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
Název: Re:$1 z bash skriptu do sed
Přispěvatel: _Jenda 13. 09. 2021, 21:43:29
Proměnná v '' se neexpanduje, použij "".
Název: Re:$1 z bash skriptu do sed
Přispěvatel: branchman 13. 09. 2021, 21:46:32
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:
Citace
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).
Název: Re:$1 z bash skriptu do sed
Přispěvatel: FKoudelka 13. 09. 2021, 21:52:53
Double quota Do Dollar substitution
Single quota Supress Substitution
Název: Re:$1 z bash skriptu do sed
Přispěvatel: A.P.Hacker 13. 09. 2021, 22:05:07
nevyzerá, že by fungovalo

sed -e 's/file.cvs/'$1'/g'

nevie mi niekto poradiť prečo?

zkuste vytisknout. jestli tam nahodou neni mezera

Kód: [Vybrat]
echo 's/file.cvs/'$1'/g'
Název: Re:$1 z bash skriptu do sed
Přispěvatel: Peter Fodrek 13. 09. 2021, 22:34:24
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:
Citace
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
Název: Re:$1 z bash skriptu do sed
Přispěvatel: RDa 14. 09. 2021, 00:46:05
sed -e 's/file.cvs/$1/g'

ja bych na to sel asi takto:
Kód: [Vybrat]
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.
Název: Re:$1 z bash skriptu do sed
Přispěvatel: k3dAR 14. 09. 2021, 01:08:11
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:
Kód: [Vybrat]
$ 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)
Kód: [Vybrat]
$ 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 ;-)
Název: Re:$1 z bash skriptu do sed
Přispěvatel: Peter Fodrek 14. 09. 2021, 07:34:20
Ďakujem všetkým
Název: Re:$1 z bash skriptu do sed
Přispěvatel: RDa 14. 09. 2021, 08:11:16
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 &
Název: Re:$1 z bash skriptu do sed
Přispěvatel: Peter Fodrek 14. 09. 2021, 12:43:05
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