$1 z bash skriptu do sed

$1 z bash skriptu do sed
« kdy: 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


_Jenda

  • *****
  • 901
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:$1 z bash skriptu do sed
« Odpověď #1 kdy: 13. 09. 2021, 21:43:29 »
Proměnná v '' se neexpanduje, použij "".

Re:$1 z bash skriptu do sed
« Odpověď #2 kdy: 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).

Re:$1 z bash skriptu do sed
« Odpověď #3 kdy: 13. 09. 2021, 21:52:53 »
Double quota Do Dollar substitution
Single quota Supress Substitution
« Poslední změna: 13. 09. 2021, 21:55:43 od FKoudelka »

Re:$1 z bash skriptu do sed
« Odpověď #4 kdy: 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'


Re:$1 z bash skriptu do sed
« Odpověď #5 kdy: 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

RDa

  • *****
  • 1 553
    • Zobrazit profil
    • E-mail
Re:$1 z bash skriptu do sed
« Odpověď #6 kdy: 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.

k3dAR

  • *****
  • 2 094
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:$1 z bash skriptu do sed
« Odpověď #7 kdy: 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
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 ;-)
« Poslední změna: 14. 09. 2021, 01:10:31 od k3dAR »

Re:$1 z bash skriptu do sed
« Odpověď #8 kdy: 14. 09. 2021, 07:34:20 »
Ďakujem všetkým

RDa

  • *****
  • 1 553
    • Zobrazit profil
    • E-mail
Re:$1 z bash skriptu do sed
« Odpověď #9 kdy: 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 &

Re:$1 z bash skriptu do sed
« Odpověď #10 kdy: 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