Kirjoittaja Aihe: Pari kysymystä sed komennon käytöstä asetustiedoston muokkaamiseen  (Luettu 2448 kertaa)

qwertyy

  • Käyttäjä
  • Viestejä: 5676
    • Profiili
Eli olen värkännyt scriptiä mikä hakee netistä ps3:lle sopivat tiedostot ja päivittää kernelin. Skripti on muuten valmis, mutta kboot.conf tiedoston muokkaaminen vaatii vielä pientä hiontaa, eli tiedoston sisältö on alunperin kutakuinkin tämän näköinen
Koodia: [Valitse]
default=linux
timeout=30
linux='/boot/vmlinux initrd=/boot/initrd.img root=UUID=48124dc5-2c8f-43d0-a210-0b6549ffde56 quiet splash'
old='/boot/vmlinux initrd=/boot/initrd.img root=UUID=48124dc5-2c8f-43d0-a210-0b6549ffde56 quiet splash'

tarkoitus on muuttaa linux rivin sisältöä niin, että vmlinux ja initrd saavat versionumeroinnin perään ja sen olen tehnyt seuraavilla komennoilla
Koodia: [Valitse]
sudo sed -i 's/vmlinux/vmlinux-2.6.24/' /etc/kboot.conf
sudo sed -i 's/initrd.img/initrd.img-2.6.24/' /etc/kboot.conf
Tämä skripti on siis tulossa tuonne psubuntun tutoriaaleihin mitä olen työstänyt ja nyt kuulin, että tuosta linux rivin perästä pitää saada pois quiet ja splash parametrit. Itse olen poistanut nuo käsin, mutta nyt pitäisi siis keksiä jatkoa tuolle skriptille. Ei myöskään olisi pahitteeksi jos nuo käyttämäni komennot saisi muokattua sellaisiksi, että ne muuttaisivat vain linux rivin sisältöä ja old rivi saisi tietysti mieluiten pysyä koskemattomana.

Kätevän oloinen tuo sed komento kunhan oppisi käyttämään sitä kunnolla.

*edit*
Siis googlella toki löytyy paljon juttua, mutta jos joku osaisi vääntää rautalangasta minulle miten homma toimii.
« Viimeksi muokattu: 13.05.08 - klo:09.33 kirjoittanut qwertyy »

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Koodia: [Valitse]
sudo sed -i '/^linux=/s/vmlinux/vmlinux-2.6.24/' /etc/kboot.conf
sudo sed -i '/^linux=/s/initrd.img/initrd.img-2.6.24/' /etc/kboot.conf
sudo sed -i '/^linux=/s/ quiet//' /etc/kboot.conf
sudo sed -i '/^linux=/s/ splash//' /etc/kboot.conf

Vaihtoehtoisesti nuo voi suorittaa myös yhdellä komennolla.

Koodia: [Valitse]
sudo sed -i \
        -e '/^linux=/s/vmlinux/vmlinux-2.6.24/' \
        -e '/^linux=/s/initrd.img/initrd.img-2.6.24/' \
        -e '/^linux=/s/ quiet//' \
        -e '/^linux=/s/ splash//' \
        /etc/kboot.conf

Jos nämä operaatiot suoritetaan skriptin sisällä niin silloin minusta on parempi jättää sudo pois ja ennemmin tarkistaa että skripti on suoritettu pääkäyttäjän oikeuksilla.
« Viimeksi muokattu: 13.05.08 - klo:11.13 kirjoittanut mgronber »

qwertyy

  • Käyttäjä
  • Viestejä: 5676
    • Profiili
Suurkiitokset. Vielä pitää kysyä, eli sed komennon osa
Lainaus
/^linux=
viitataan riviin, jonka jälkeen muutokset tehdään? Eli jos tuolla linux= rivillä olisi sen edessä vaikka vmlinux sana, niin sitä ei muokattaisi?

*edit*
Pitänee kokeilla tehdä jotain ihan perusharjoituksia tuolla sedillä.
« Viimeksi muokattu: 13.05.08 - klo:12.34 kirjoittanut qwertyy »

beh

  • Käyttäjä
  • Viestejä: 154
    • Profiili
Tuolla ensimmäisellä ehdolla (^linux=) valitaan ne rivit joihin ko. komennon muutokset kohdistetaan.

Toinen kysymyksesi on vähän epäselvä. ^-merkkillä viitataan rivin alkuun.  vmlinux.*linux= -tällaista riviä ei muokattavasta tekstistä löysy joten muutoksia ei tuollaisella ehdolla tehtäisi.


Suosittelen tutustumista sed manuaaliin:
http://www.gnu.org/software/sed/manual/sed.html

pari muuta ihan hyvää sivua
http://www.grymoire.com/Unix/Sed.html
http://www.student.northpark.edu/pemente/sed/sed1line.txt

Manuaalia ei tarvi lukea kokonaan, kunhan ymmärtää suunnilleen ohjelman toiminnan. Sen jälkeen ongelmiin osaa hakea apua itsekin.
« Viimeksi muokattu: 13.05.08 - klo:13.22 kirjoittanut beh »

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Suurkiitokset. Vielä pitää kysyä, eli sed komennon osa
Lainaus
/^linux=
viitataan riviin, jonka jälkeen muutokset tehdään?

Kyllä. Perässä oleva korvaus s/.../.../ tehdään vain jos sitä edeltävä ehto /^linux=/ toteutuu. Auki luettuna tuo ehto toteutuu kaikilla riveillä jotka alkavat (^) tekstillä "linux=" ja niille tehdään tuo perässä määritelty korvaus.

Lainaus
Eli jos tuolla linux= rivillä olisi sen edessä vaikka vmlinux sana, niin sitä ei muokattaisi?

Tuolla yllä olevalla ehdolla sitä ei muokattaisi, mutta jos ehdosta puuttuisi rivin alkua tarkoittava ^-merkki niin kaikki rivit joilla on merkkijono "linux=" toteuttaisivat tuon ehdon ja niille toteutettaisiin ehdon jälkeen määritelty operaatio.

qwertyy

  • Käyttäjä
  • Viestejä: 5676
    • Profiili
Kiitoksia vastauksista.
Lainaus
Tuolla yllä olevalla ehdolla sitä ei muokattaisi, mutta jos ehdosta puuttuisi rivin alkua tarkoittava ^-merkki niin kaikki rivit joilla on merkkijono "linux=" toteuttaisivat tuon ehdon ja niille toteutettaisiin ehdon jälkeen määritelty operaatio.
Varsinkin tätä hain tuolla aika sekavalla kysymykselläni ja kiitoksia myös linkeistä. Arvelinkin että tältä foorumilta tulee selkeitä vastauksia.