Forum Linux.pl
Programowanie => Bash, skrypty powłoki => Wątek zaczęty przez: w 2005-11-23, 17:28:08
-
jak w temacie - sciagnalem pliki.. zkompilowalem i co teraz?? dodam ze jestem newbie
-
Potrzebuje wprowadzić pewne zmiany w pliku konfiguracyjnym xml jednego z programów. I teraz moje pytanko jak wyciąć z czegoś takiego:
>
>
>
>
>
>
>
>
>
>
>
tylko całe 'Group name="ble2"'?
Próbowałem sed'em:
cat plik.xml | tr -d "n" | sed 's%.*%%g'
... ale niestety z racji, że "*" działa zachłannie to wycina wszystko od 'Group name="ble2"' do ostatniego "" czyli 'Group name="ble3"' też leci:(
Proszę o pomoc;)
-
Na szybko to mi cos takiego do glowy wpadlo:
cat plik.xml | awk '{gsub(//, " "); print}'
-
2005-11-23 17:15:16 greg000 napisał:
> Na szybko to mi cos takiego do glowy wpadlo:
>
> cat plik.xml | awk '{gsub(//, " "); print}'
>
Ale to mi wytnie tylko '' a ja chce całe:
-
#!/bin/ awk -f
BEGIN {
while ((getline a < "nazwapliku") > 0)
{
if (a ~ //)
{
getline a < "nazwapliku"
getline a < "nazwapliku"
getline a < "nazwapliku"
}
print a
}
}
-
2005-11-24 16:20:31 greg000 napisał:
> #!/bin/ awk -f
>
> BEGIN {
>
> while ((getline a < "nazwapliku") > 0)
> {
> if (a ~ //)
> {
> getline a < "nazwapliku"
> getline a < "nazwapliku"
> getline a < "nazwapliku"
> }
> print a
> }
> }
>
Ok a co jeśli ja nie znam liczby elementów? I moze być np. tak:
Owszem starczyła by teraz pętla while która by sprawdzała czy linia nie zawiera "" ale to mnie i tak nie satysfakcjonuje bo w pliku xml wcale nie musi być znaków nowej lini... wszystko moze być w jednej a program i tak dobrze zinterpretuje plik. Czy nie da się tego jakoś lepiej zrobić? Bez ograniczania do wczytywania pojedynczych lini?
-
witam:)
Może skożystasz z mojego programiku. Napisałem go do htmla ale do xml tez może być w pewnych zastosowaniach
Możesz pobrać go z http://freya.dsv.agh.edu.pl/~amg/download/progs/htmlp.tar.gz
a żeby wypakować tego taga "Group" zrób tak:
$./htmlp.bin -i test.xml -tagct Group -include_tag
żeby wypakować wszystkie tagi:
$./htmlp.bin -i test.xml -tagct Group -include_tag -tall
żeby wypakować wszystkie taga "Group" który ma parametr name="ble1" :
$./htmlp.bin -i test.xml -tagct Group -include_tag -cmp name ble1
aby wyswietlic pomoc:
żeby wypakować wszystkie tagi:
$./htmlp.bin -help
zresztą są źródła to w razie czego możesz sobie coś ulepszyć/przerobić :)
mam nadzieje że Ci sie to do czegoś przyda :)
pozdrawiam
-
> Owszem starczyła by teraz pętla while która by sprawdzała czy linia nie zawiera
> ""
Oczywiscie, to co podalem to byl tylko przyklad. Petla while rozwiaze problem z wieloma wpisami.
>ale to mnie i tak nie satysfakcjonuje bo w pliku xml wcale nie musi
> być znaków nowej lini... wszystko moze być w jednej a program i tak dobrze zinterpretuje plik.
> Czy nie da się tego jakoś lepiej zrobić? Bez ograniczania do wczytywania pojedynczych lini?
Pewnie ze sie da zrobic, ale jak nie bedzie znaku konca lini i wszytko bedzie w jedej linijce to niestety sprawa sie komplikuje (chodz watpie zeby normalny plik konfiguracyjny byl tak napisany).
-
2005-11-24 19:38:59 greg000 napisał:
> Pewnie ze sie da zrobic, ale jak nie bedzie znaku konca lini i wszytko bedzie w jedej linijce
> to niestety sprawa sie komplikuje (chodz watpie zeby normalny plik konfiguracyjny byl tak
> napisany).
I właśnie o tą komplikacje mi chodzi. Program radzi sobie z brakiem znaków nowej lini więc chce aby skrypt też umiał sobie z tym poradzić... znasz jakiś sposób jak sobie z tą komplikacją poradzić?;)
> Może skożystasz z mojego programiku. Napisałem go do
> htmla ale do xml tez może być w pewnych zastosowaniach
To mi przypomina, że już dawno powinienem się tego języka nauczyć:| Tak to jest jak się poszło na uczelnie o której się nic nie wiedziało:/ Właśnie chodzi o rozwiązanie skryptowe ewentualnie jak się wkurze to się naucze C i napisze sobie cały program w tym języku:P (bo ten skrypt to zaledwie fragment dużo większego)
-
#!/bin/awk -f
BEGIN {
RS="[<>]"
plik="plik.xml"
while ((getline < plik) > 0)
{
if ($0 ~ /Group name="ble1"/)
{
while ($0 != "/Group")
getline < plik
getline < plik
}
if (NF != 0)
{
print "<" $0 ">"
}
}
close (plik)
}
Polecam man awk :)
-
Nie testowałem tego ale na pierwszy rzut oka nadal działa to na zasadzie wczytywania pojedynczych lini i nadal nie rozwiązuje problemu a co by było gdyby w jednej lini znajdowało się coś takiego:
Wtedy niestety skrypt ten leży:(
No chyba, że się myle to mnie poprawcie
-
Hej,
Możesz spróbować tak:
cat plik.xml | tr -d "n" | sed 's%[^>]*[^<]*%%g'
Oczywiście można to dopucować żeby wyciął też spacje, ale powinno działać.
-
2005-11-25 18:40:14 xamil napisał:
> Nie testowałem tego ale na pierwszy rzut oka nadal działa to na zasadzie wczytywania
> pojedynczych lini i nadal nie rozwiązuje problemu a co by było gdyby w jednej lini znajdowało
> się coś takiego:
>
>
>
> Wtedy niestety skrypt ten leży:(
>
> No chyba, że się myle to mnie poprawcie
Mylisz sie wiec cie poprawiam. Wszystko dziala jak ma.
Niz napiszesz, ze cos nie dziala to najpierw to sprawdz.