Portál AbcLinuxu, 10. května 2025 07:03

Dotaz: Skript pro změnu obsahu souboru

12.3.2006 20:29 beginner
Skript pro změnu obsahu souboru
Přečteno: 153×
Odpovědět | Admin
Jsem začátečník co se týče skriptů. Párkrát jsem jich několik udělal pro důkladném prostudování a probrouzdání internetem. Ovšem nevím, jak udělat skript, který by automaticky prohledal určitý adresář, našel všechny soubory s příponou .conf a ve všech zkontroloval, zda v nich je určitý řetězec např.:

<nastaveni>
neco=necemu
</nastaveni>

pokud by tam nebyl, doplnil by ho a pokud by tam napriklad misto necemu bylo nicemu, nahradil by to na necemu. Neví někdo jak toto udělat příp. odkaz na nějakou web stránku, kde se tohle řeší?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.3.2006 20:37 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Skript pro změnu obsahu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejlepší je, když se začneš učit základy programování/skriptování. Pokud se chceš učit třeba v shellu (Bashi) tak si najdi BASH Programming - Introduction HOW-TO a Advanced Bash-Scripting Guide.

Zkus si ten svůj problém rozebrat na nejmenší možné úlohy a ty vyřeš. Když se na něčem konkrétním zarazíš a nenajdeš na internetu/v dokumentaci pomoc, tak se zeptej tady v diskuzi. Pokládej konkrétní otázky, pokud možno i s popisem co je cílem, co už máš hotové a případně i vzorkem toho co nefunguje. Rozhodně nechtěj aby místo tebe někdo napsal celý skript.
-- Nezdar není hanbou, hanbou je strach z pokusu.
12.3.2006 21:08 beginner
Rozbalit Rozbalit vše Re: Skript pro změnu obsahu souboru
No konkrétně nevim jak nahradit nějaký konkrétní text jiným.
12.3.2006 21:18 beginner
Rozbalit Rozbalit vše Re: Skript pro změnu obsahu souboru
už jsem na to přišel
12.3.2006 21:24 Jáchym Čepický | skóre: 29 | blog: U_Jachyma
Rozbalit Rozbalit vše Re: Skript pro změnu obsahu souboru
no, obecne reseni html(xml) pres konzolové nástroje je hodně obtížný úkol a já osobně se do toho pouštím obvykle jen velice nerad.

co se nahrazování textu týče, pro tento případ bude asi nejlepší sed:
cat soubor | sed "s/co nahradit/cim nahradit/g" > soubor.new
neboli
for file in *.html; do
    cat $file | sed "s/co \(nahradit\)/cim \1/g" >> file.new
    mv $file $file-zaloha
    mv $file.new $file
done
zajímavou možností je awk:
echo "co to je" | awk '{print "$1 $3 $2\n"}'
a to je v podstate cele o tech slonech...
12.3.2006 21:35 beginner
Rozbalit Rozbalit vše Re: Skript pro změnu obsahu souboru
Děkuji, zjistil jsem, že sem na to stejně nepřišel, problém je, jak nahradit několik po sobě jdoucích řádků jinými, nejenom jedno slovo např.:

prvni radek/ze trech
druhy radek, aby to ignorovalo znaky +*-/
treti


nahradilo treba


upraveny prvni
i druhy
i treti
14.3.2006 08:39 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Skript pro změnu obsahu souboru
Fuj. Tohle po základním přečtení TFM by střízlivý člověk napsal jako
for file in *.html; do
    sed -i-zaloha -e "s/co \(nahradit\)/cim \1/g" $file
done
A pokud chce prohledat ten adresář i s podadresáři tak
find -name '*.html' -print0 | xargs -0 sed -i-zaloha -e "s/co \(nahradit\)/cim \1/g"
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
13.3.2006 14:58 beginner
Rozbalit Rozbalit vše Re: Skript pro změnu obsahu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jde to vubec nejak?
13.3.2006 22:33 beginner
Rozbalit Rozbalit vše Re: Skript pro změnu obsahu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jo a taky je pro mne zahadou, jak tam vpravit znaky jako */$+ ...
14.3.2006 08:43 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Skript pro změnu obsahu souboru
Otázka zní co a kam. Podrobněji specifikovat by to chtělo. Třeba pokud chci slovo ahoj nahradit */$+ tak to udělám úplně jednoduše
echo 'Stačí říct ahoj a je ahoj uděláno' | sed 's/ahoj/\*\/$\+/g'
RTFM
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
14.3.2006 11:29 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Skript pro změnu obsahu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vždyť to není vůbec problém. Například v sedu to jde udělat takto. Osobně bych ale raději použit třeba perl :-)
find -name '*.conf' -print0 |
xargs -0 sed -i.bak -e '/<nastaveni>/,/<\/nastaveni>/{
  /^neco/s/=.*/=necemu/;Ta;h
  :a
  /<\/nasaveni>/{
    x;s/^neco//;x;t
    h;ineco=necemu
  }
}
${
  x;s/^$//;x;T;a<nastaveni>\
  neco=necemu\
</nastaveni>
}'
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
14.3.2006 11:39 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Skript pro změnu obsahu souboru
Ech, překlep se vloudil
ind -name '*.conf' -print0 |
xargs -0 sed -i.bak -e '/<nastaveni>/,/<\/nastaveni>/{
  /^neco/s/=.*/=necemu/;Ta;h
  :a
  /<\/nastaveni>/{
    x;s/^neco//;x;t
    h;ineco=necemu
  }
}
${
  x;s/^$//;x;T;a<nastaveni>\
  neco=necemu\
</nastaveni>
}'
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
14.3.2006 11:47 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Skript pro změnu obsahu souboru
Verze která není háklivá na mezery na začátku řádku
find -name '*.conf' -print0 |
xargs -0 sed -i.bak -e '/<nastaveni>/,/<\/nastaveni>/{
  /^[[:space:]]*neco/{s/=.*/=necemu/;Ta;h}
  :a
  /<\/nastaveni>/{
    x;s/^$//;x;T
    h;i  neco=necemu
  }
}
${
  x;s/^$//;x;T;a<nastaveni>\
  neco=necemu\
</nastaveni>
}'
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.

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.