Portál AbcLinuxu, 9. května 2025 06:30

Dotaz: Náhrada textu pomocí sed

28.1.2014 17:16 Alan
Náhrada textu pomocí sed
Přečteno: 543×
Odpovědět | Admin
Ahoj, proč tohle funguje
sed -i 's/^text = .*/text = (aaa,bbb)/' /home/alan
ale tohle ne?
A="aaa"
B="bbb"
sed -i 's/^text = .*/text = ($A,$B)/' /home/alan
Poradí někdo jak to opravit?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.1.2014 17:34 jekub
Rozbalit Rozbalit vše Re: Náhrada textu pomocí sed
Odpovědět | | Sbalit | Link | Blokovat | Admin
.sed
nebo
export A="aaa"
export B="bbb"
Řešení 1× (iKoulee)
martin-ux avatar 28.1.2014 18:30 martin-ux | skóre: 18 | Bratislava
Rozbalit Rozbalit vše Re: Náhrada textu pomocí sed
Odpovědět | | Sbalit | Link | Blokovat | Admin
daj to spravne do uvodzoviek, napr.
A="me" ; echo "catchme" | sed  "s/$A/you/"
..when you do things right, people won't be sure you've done anything at all..
Řešení 1× (iKoulee)
28.1.2014 21:14 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Náhrada textu pomocí sed
Odpovědět | | Sbalit | Link | Blokovat | Admin

Nefunguje to, protože v apostrofech se neexpandují proměnné, zatímco v uvozovkách ano. Takže například cokoliv z tohoto by fungovalo:

sed -i 's/^text = .*/text = ('"$A"','"$B)"'/' /home/alan
sed -i "s/^text = .*/text = (${A},${B})/" /home/alan

Obojí je trochu přehnaně opatrné; :-) šlo by to bez nadbytku uvozovek i bez složených závorek. Ale je dobré si přečíst někde v man bash pravidla, která říkají, co se kdy expanduje, kde končí název proměnné a tak dále.

29.1.2014 10:37 Petr MOTEJLEK | skóre: 6
Rozbalit Rozbalit vše Re: Náhrada textu pomocí sed
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj,

Předpokládám, že to pouštíš v Bashi. Ten, když vidí ty jednoduchý uvozovky, tak v takovým řetězci proměnný nahrazovat nebude. Když z nich uděláš dvojitý, tak už nahrazovat bude (bude se taky pokoušet dělat další expanze, ale o tom si raději už někde přečti).

sed -i 's/^text = .*/text = ($A,$B)/' /home/alan

zkus nahradit

sed -i "s/^text = .*/text = ($A,$B)/" /home/alan

a tenhle jednoduchej příklad ti už projde.
5.2.2014 21:24 JJ
Rozbalit Rozbalit vše Re: Náhrada textu pomocí sed
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj, taky mám problém se sed-em, poradil by prosím někdo?
sed -i -e "s/XXXXXX/$(dirname $0)/g" /tmp/soubor
Děkuji pěkně za pomoc
6.2.2014 18:01 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Náhrada textu pomocí sed

Dal bych tam místo lomítek svislítka, protože expanze $(dirname $0) obsahuje vždycky aspoň jedno lomítko, což sed nese nelibě, když se lomítka používají i jako oddělovač.

sed -i "s|XXXXXX|$(dirname $0)|g" /tmp/soubor

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.