Portál AbcLinuxu, 10. května 2025 01:36

Dotaz: Nahrazeni textu pomoci awk/sed/?

5.3.2009 08:32 dlamb
Nahrazeni textu pomoci awk/sed/?
Přečteno: 797×
Odpovědět | Admin

Ahoj,

mohl by mi prosim nekdo poradit s timto? Mam soubor ktery obsahuje prosty text a na jakemkoliv miste v soboru se muze nachazet "znacka" ktera udava ze zrovna na tomto miste chci vlozit text vygenerovany dalsim skriptem. Napr:

 

Prosty text...
bla bla bla
takto vypada napoveda u programu lspci:
$LSPCIHELP
toto je vystup lspci na mem pocitaci:
$LSPCIPRINT
 

V tomto souboru  bych tedy chtel aby se $LSPCIHELP nahradil napovedou 'lspci --help' a u $LSPCIPRINT 'lspci'. A upravena verze se vypsala na stdout.

Staci mi napsat co na to pouzit. Zda sed, awk a nebo si vystacim s jinou standartni utilitou? Pripadne jake funkce z techto programu.

Diky moc za radu...

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

Odpovědi

5.3.2009 09:02 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Nahrazeni textu pomoci awk/sed/?
Odpovědět | | Sbalit | Link | Blokovat | Admin
sed -e "s/\$LSPCIHELP/$(lspci --help)/" soubor.txt
Výsledek jde na stdout, pokud chcete nahrazovat přímo v tom souboru tak přidat přepínač sed -i.
5.3.2009 09:04 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Nahrazeni textu pomoci awk/sed/?
Pokud toho máte více:
sed -e "s/\$LSPCIHELP/$(lspci --help)/" -e "s/\$LSPCIPRINT/$(lspci --print)/" soubor.txt
Pokud toho máte upe meximálně tak by stálo za zvážení sotisfikovanější řešení.
5.3.2009 09:08 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Nahrazeni textu pomoci awk/sed/?
Jo ono to vlastně nepůjde, je to prasárna, pokud je ve výstupu těch příkazů lomítko :) Zajímavé, zrovna teď mne nic elegantního nenapadá, je tu ještě možnost číst to ze souboru, ale to není to pravé ořechové.
5.3.2009 09:20 dlamb
Rozbalit Rozbalit vše Re: Nahrazeni textu pomoci awk/sed/?

Tohle me taky napadlo. Zas takova prasarna to myslim neni protoze to bude tak pro 7 vyrazu pro nahrazeni, ale zajimalo by me jak na lepsi :) S tim lomitkem to je pravda ale myslim ze \ tam nikde v tom vystupu nebude. Ale stalo by to za to osetrit...

5.3.2009 11:23 ams
Rozbalit Rozbalit vše Re: Nahrazeni textu pomoci awk/sed/?

GNU sed umi modifikator 'e' u nahrazovani:

sed -e 's/\$LSPCIHELP/\nlspci --help\n/eg' -e '/\$znacka/\nprikaz\n/eg'

 

5.3.2009 11:38 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Nahrazeni textu pomoci awk/sed/?
Dobré, to jsem netušil. Sed vždycky něčím překvapí :) V man modifikátor e nemám a v info se mi to hledat nechce, ale vypadá to že spouští exec na celý buffer, takže je to asi ještě v obecném případě jistější ošetřit, aby na tom řádku nic jiného nebylo:
sed -e 's/^\$LSPCIHELP$/\nlspci --help\n/eg'

nebo

sed -e 's/^.*\$LSPCIHELP.*$/\nlspci --help\n/eg'
5.3.2009 12:22 dlamb
Rozbalit Rozbalit vše Re: Nahrazeni textu pomoci awk/sed/?

Paradne to funguje... az na problem ze to neni standartni prikaz sedu a tak na serveru kde to potrebuju rozchodit (FreeBSD) dostanu hlasku :  bad flag in substitute command: 'e'

Nebudu se tajit tim ze to mam do skoly. Tohle je posledni vec co mi do projektu schazi a nemuzu prijit na nejake pekne reseni :/

5.3.2009 18:33 pupala | skóre: 21
Rozbalit Rozbalit vše Re: Nahrazeni textu pomoci awk/sed/?
Ale je to standardny prikaz GNU sed-u uz par verzii
6.3.2009 06:50 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Nahrazeni textu pomoci awk/sed/?
Což moc nepomůže, pokud na to FreeBSD nemá ten GNU sed, žejo :) Pořád říkám že "Pozor FreeBSD: subj" by se mělo psát hned do subjectu :D
5.3.2009 09:54 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Nahrazeni textu pomoci awk/sed/?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevím, jak je to s přenositelností, ale GNU AWK zvládne tohle:
/^\$LSPCIHELP$/ {
    system("lspci --help");
    next;
}
# ostatní kopíruj
{ 
    print $0;
}
I am always ready to learn although I do not always like to be taught. (W. Churchill)

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.