Nowe posty

xx Problem z Linux Lite po instalacji (1)
Dzisiaj o 15:19:31
xx Dystrybucja pod HP Omen (7)
Dzisiaj o 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: [bash] Zastępowanie fragmentów tekstu  (Przeczytany 9984 razy)

  • Gość
[bash] Zastępowanie fragmentów tekstu
« dnia: 2005-11-23, 17:28:08 »
jak w temacie - sciagnalem pliki.. zkompilowalem i co teraz?? dodam ze jestem newbie

xamil

  • Gość
[bash] Zastępowanie fragmentów tekstu
« Odpowiedź #1 dnia: 2005-11-23, 13:13:51 »
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;)

greg000

  • Gość
[bash] Zastępowanie fragmentów tekstu
« Odpowiedź #2 dnia: 2005-11-23, 17:15:16 »
Na szybko to mi cos takiego do glowy wpadlo:

cat plik.xml | awk '{gsub(//, " "); print}'

xamil

  • Gość
[bash] Zastępowanie fragmentów tekstu
« Odpowiedź #3 dnia: 2005-11-24, 10:36:04 »
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:




greg000

  • Gość
[bash] Zastępowanie fragmentów tekstu
« Odpowiedź #4 dnia: 2005-11-24, 16:20:31 »
#!/bin/ awk -f

BEGIN {

while ((getline a < "nazwapliku") > 0)
     {
       if (a ~ //)
           {
             getline a < "nazwapliku"
             getline a < "nazwapliku"
             getline a < "nazwapliku"
           }
      print a
     }
}

xamil

  • Gość
[bash] Zastępowanie fragmentów tekstu
« Odpowiedź #5 dnia: 2005-11-24, 18:50:30 »
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?

j3drek

  • Gość
[bash] Zastępowanie fragmentów tekstu
« Odpowiedź #6 dnia: 2005-11-24, 19:34:52 »
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

greg000

  • Gość
[bash] Zastępowanie fragmentów tekstu
« Odpowiedź #7 dnia: 2005-11-24, 19:38:59 »
> 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).

xamil

  • Gość
[bash] Zastępowanie fragmentów tekstu
« Odpowiedź #8 dnia: 2005-11-24, 22:27:25 »
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)

greg000

  • Gość
[bash] Zastępowanie fragmentów tekstu
« Odpowiedź #9 dnia: 2005-11-25, 15:49:07 »
#!/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 :)

xamil

  • Gość
[bash] Zastępowanie fragmentów tekstu
« Odpowiedź #10 dnia: 2005-11-25, 18:40:14 »
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

xis

  • Gość
[bash] Zastępowanie fragmentów tekstu
« Odpowiedź #11 dnia: 2005-11-25, 23:44:51 »
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ć.

greg000

  • Gość
[bash] Zastępowanie fragmentów tekstu
« Odpowiedź #12 dnia: 2005-11-26, 18:50:09 »
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.