sed

Sekcia: Konfigurácia 30.07.2010 | 13:08
Avatar nighthawk Gentoo  Používateľ
Čaute,
potreboval by som sa poradiť.

ako je možné dosiahnuť to aby pomocou jedného príkazu sed som zamenil viacero reťazcov, ktoré sa nachádzajú v premennej.
je mi jasné, že keď chcem vymeniť viacej reťazcov tak použijem niečo takého sed -e 's/slovo1/slovo2/g ; s/slovo3/slovo4/g'

ale keď si predstavím, že tých slov je cca 1000 a môžu sa meniť, tak je to nereálny spôsob.
Existuje nejaký taký spôsob akým to docieliť? aj za použitia iných nástrojov?

Mňa napadlo to že, cez nejaký cyklus budem načítavať tie slová ktoré chcem vymeniť a po jednom ich vymieňať.
Ďakujem.
    • Re: sed 30.07.2010 | 13:45
      Avatar Grawp   Používateľ
      Napíš nejaký príklad a pravidlá podla ktorých chceš niečo meniť. Inak sed može byť v niektorých prípadoch na obtiaž a danú operáciu dokáze vykonať samotný shell bez externých príkazov.
      • Re: sed 30.07.2010 | 13:51
        Avatar nighthawk Gentoo  Používateľ
        takže ide o to, že mám slovník zo slovami, ktoré chcem v nejakom inom súbore "obaliť" značkami <>.
        čiže keď sa v slovníku nachádza slovo: ahoj.
        tak za použitia sed: sed '/s/$slovo/< $slovo >/g'
        dostanem vo výstupnom súbore označené: < ahoj >.

        Len tých slov v slovníku môže byť aj okolo stoviek.

    • Re: sed 30.07.2010 | 15:31
      Avatar fraxinus Debian 5.0  Používateľ
      #!/bin/bash
      for i in `cat slovnik`; do
        sed -i "s/$i/<$i>/g" "$1"
      done
      

      ./skript.sh pokus.txt
      (za predpokladu ze v akt. adresari je slovnik kde na riadkoch su slova)

      I am not here. Isn't here just there without a t?
      • Re: sed 30.07.2010 | 15:42
        Avatar nighthawk Gentoo  Používateľ
        podobný spôsob som použil, a zdal sa mi príliš náročný na čas.
        nakoniec som zistil lepší spôsob:

        cat Slovnik | xargs -I {} sed -i 's/\b{}\b/<{}>/g' Vstup && cat Vstup

        tralala <ahoj> ahojky ako sa mas <janci>? <lol>! ty lolo.

        v slovniku je:
        ahoj
        janci
        lol

        ide to s ním rýchlejšie, ale ďakujem za odpoveď
        • Re: sed 30.07.2010 | 16:42
          sed   Návštevník
          sed 's/\(.*\)/<\1>/'