Portál AbcLinuxu, 9. května 2025 06:30
sed -i 's/^text = .*/text = (aaa,bbb)/' /home/alanale tohle ne?
A="aaa" B="bbb" sed -i 's/^text = .*/text = ($A,$B)/' /home/alanPoradí někdo jak to opravit?
Řešení dotazu:
.sednebo
export A="aaa" export B="bbb"
A="me" ; echo "catchme" | sed "s/$A/you/"
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.
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.
sed -i -e "s/XXXXXX/$(dirname $0)/g" /tmp/souborDěkuji pěkně za pomoc
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
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.