Portál AbcLinuxu, 2. srpna 2025 13:27


Dotaz: Proměnná v sedu

4.3.2011 15:59 knorr
Proměnná v sedu
Přečteno: 610×
Odpovědět | Admin
Dobrý den. Projel jsem fórum a rady jinde bohužel nefungovaly na můj problém. Umístění proměnné do sedu. Chci na začátek každého řádku přidat hodnotu uloženou v proměnné. Zatímco obyčejný textový řetězec vložit lze: sed "s/^/ahoj/"

vložení proměnné mi i přes použití dvojitých uvozovek a uzávorkování proměnné sed nespolkne a hlásí chybu. Můj zápis vypadá takto: sed "s/^/${promenna}"

Ví si s tím někdo rady?

Ř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

Tarmaq avatar 4.3.2011 16:06 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Proměnná v sedu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mohlo by stacit
sed s/^/$promenna/
pokud to prikaz nevezme, zkus
sed "s/^/$promenna/"
nebo
sed 's/^/'$promenna'/'
vice info zde
Don't panic!
4.3.2011 16:18 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Proměnná v sedu
Ono bude hodně záležet na obsahu té proměnné. Ve všech třech případech bude problém, pokud bude hodnota obsahovat lomítko, v prvním a třetím bude dělat problémy i mezera. Možná se najdou i jiné znaky.
4.3.2011 16:23 knorr
Rozbalit Rozbalit vše Re: Proměnná v sedu
Ano, ani jeden případ mi bohužel nepomohl, protože obsahem proměnné je cesta, čili lomítka.
Tarmaq avatar 4.3.2011 16:36 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Proměnná v sedu
tak to je fajn, ze jsme se tento detail dozvedeli uz v zadani.. v tom pripade pouzij
sed "s#^#$promenna#"
, nebo misto krizku pouzij jiny znak nevyskytujici se v ceste
Don't panic!
Tarmaq avatar 4.3.2011 16:31 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Proměnná v sedu
lomitko: ano to by byl problem, pokud by toto kolidovalo, je mozne nahradit delimitery necim jinym, napr sed 's#^#'$foo'#'

mezera by ale mela delat problem jen u prvniho pripadu, zbyle dva projdou:
$ cat foo
radek1
radek2
radek3
$ echo $bar
toto obsahuje radek: 
$ sed 's/^/'$bar'/' foo
toto obsahuje radek: radek1
toto obsahuje radek: radek2
toto obsahuje radek: radek3
$ sed "s/^/$bar/" foo
toto obsahuje radek: radek1
toto obsahuje radek: radek2
toto obsahuje radek: radek3
Don't panic!
4.3.2011 17:01 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Proměnná v sedu

To bude nějaká zvláštní verze sedu, že si to poskládá z jednotlivých parametrů (a i pak nemůže poznat rozdíl mezi jednou mezerou a dvěma). Nebo to bude shellem, který nějakým způsobem pochopí, že v tomto případě nechcete, aby mezera v hodnotě proměnné fungovala oddělovač parametrů. Každopádně mně to nefunguje (sed 4.2.1, bash 4.1.10, OpenSuSE 11.4 (skoro)):

mike@lion:~> var='a b c'
mike@lion:~> seq 3 | sed -e 's/^/'$var'/'
sed: -e výraz č. 1, znak 5: neukončený příkaz „s“
mike@lion:~> seq 3 | sed 's/^/'$var'/'
sed: -e výraz č. 1, znak 5: neukončený příkaz „s“
Tarmaq avatar 4.3.2011 17:24 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Proměnná v sedu
mate pravdu, pouzivam zsh a projde mi to, v bashi uz ne.. (openSUSE 11.3)
Don't panic!
4.3.2011 18:10 mlz
Rozbalit Rozbalit vše Re: Proměnná v sedu
Je to spatne? (velka mezera je TAB a mezera) (/bin/bash)

export VAR='a /b    c'; seq 3 |sed -e "s,^,$VAR,"
a /b	 c1
a /b	 c2
a /b	 c3

PM
Tarmaq avatar 4.3.2011 18:21 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Proměnná v sedu
to je dotaz jako na me? IMHO je zbytecny ten export, melo by stacit
VAR='a /b    c'; seq 3 | sed -e "s,^,$VAR," 
a /b	c1
a /b	c2
a /b	c3
Don't panic!

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.