Putkitettu tiedoston muokkaus

Discussion in 'Linux -keskustelu' started by Knikke, Oct 16, 2006.

  1. Knikke

    Knikke Member

    Joined:
    Oct 16, 2006
    Messages:
    20
    Likes Received:
    0
    Trophy Points:
    11
    Hei!

    Olen käyttänyt linuxia verrattain vähän ja tarttisin apua putkitetun komennon tekoon. Komennon tulisi tehdä:
    1. Skannata kansioita ja etsiä sieltä tiedot index.php jotka sisältää tekstin main. Skannattava syvyys on 1.
    find -maxdepth 1 -name 'index.php' toi ettii muuten muttei tarkista sisältääko tekstiä.
    2. Jos tiedostoja löytyy, lisätään tiedoston alkuun tai riville X rivi: -esimerkki-

    T: Niko
     
  2. Ysf

    Ysf Active member

    Joined:
    Oct 2, 2005
    Messages:
    1,954
    Likes Received:
    1
    Trophy Points:
    68
    ihan suoraan en ny tuota komentoa voi antaa, kun pitäisi vähän testatakkin..

    mutta.. jos haluat 1 riville jonkun merkkijonon, niin sitten pitää kikkailla temppitiedostoilla, esim näin:

    olkoon tiedoston nimi nyt korvaa.sh
    Code:
    #!/bin/bash
    # lisää tietyn 2. parametrinä annetun merkkijonon 1. 
    # parametrinä annettuun tiedostoon
    # korvaa.sh <tiedostonnimi> "merkkijono"
    
    # tarkistetaanko onko tiedostonimi sopiva
    case "$1" in
    "") echo "Käyttö: ${0##*/} <tiedostonimi> <merkkijono>"; exit $E_PARAM;;  
    -*) FILENAME=./$1;;   
    * ) FILENAME=$1;;
    esac
    #tarkistetaan onko lisättävää merkkijonoa
    case "$2" in
    "") echo "Käyttö: ${0##*/} <tiedostonimi> <merkkijono>"; exit $E_PARAM;;
    *) STRTOADD=$2;;
    esac
    #pistetään merkkijono tmppitiedoston kärkeen.
    echo $STRTOADD > tmp.php
    #luetaan tiedosto ja laitetaan temppitiedoston loppuun
    cat $FILENAME >> tmp.php
    #wanaha tiedosto pois, temppiä tilalle
    rm $FILENAME; mv tmp.php $FILENAME
    
    tai sitten jos haluaa jollekkin tietylle riville aina merkinnän, niin se voisi mennä jotenkin näin..

    Code:
    #!/bin/bash
    # lisää tietyn parametrinä 3. annettun merkkijonon, 
    # parametrinä 2. annetulle riville 
    # parametrinä 1. annettuun tiedostoon 
    #
    # korvaa.sh <tiedostonimi> <rivinro> <merkkijono>
    
    # tarkistetaanko onko tiedostonimi sopiva
    case "$1" in
    "") echo "Käyttö: ${0##*/} <tiedostonimi> <merkkijono>"; exit $E_PARAM;;  
    -*) FILENAME=./$1;;   
    * ) FILENAME=$1;;
    esac
    #tarkistetaan onko rivinumeroa
    case "$2" in
    "") echo "Käyttö: ${0##*/} <tiedostonimi> <rivinro> <merkkijono>"; exit $E_PARAM;;
    *) LINE=$2;;
    esac
    #tarkistetaan onko lisättävää merkkijonoa
    case "$3" in
    "") echo "Käyttö: ${0##*/} <tiedostonimi> <merkkijono>"; exit $E_PARAM;;
    *) STRTOADD=$3;;
    esac
    #luetaan 10 ensimmäistä riviä ja laitetaan temppitiedostoon
    head -n$LINE > tmp.php
    #lisätään se yksi rivi
    echo $STRTOADD >> tmp.php
    #luetaan loput temppitiedoston loppuun
    more +$line $FILENAME >>tmp.php
    #wanaha tiedosto pois, temppiä tilalle
    rm $FILENAME; mv tmp.php $FILENAME
    

    sitten se looppi on vähän kinkynmpi.. ehkä tuolla findilla olisi hyvä tehdä lista tiedostoista joita muuttaa, find blaablaa > muokattavat.txt. Sitten tuota muokattavat.txt:tä pitäisi lukea rivi kerrallaan ja käyttää jompaa kumpaa yllä mainittua scriptiä...

     
    Last edited: Oct 16, 2006
  3. Knikke

    Knikke Member

    Joined:
    Oct 16, 2006
    Messages:
    20
    Likes Received:
    0
    Trophy Points:
    11
    Kiitoksia vastauksestasi. Tuosta olisi apua jos saisin ajettua tuon luomani korvaa.sh-tiedoston. Onko tohon olemassa mitään ihan komentoriviillä ajettavaa "rimpsua" :D
     
  4. Bluekkis

    Bluekkis Active member

    Joined:
    Aug 4, 2003
    Messages:
    2,235
    Likes Received:
    0
    Trophy Points:
    66
    chmod u+x korvaa.sh
    ./korvaa.sh
     
  5. Knikke

    Knikke Member

    Joined:
    Oct 16, 2006
    Messages:
    20
    Likes Received:
    0
    Trophy Points:
    11
    Chmod korjasi tuon että voin ajaa sen... Kiitos!

    Seuraava ongelma on kun lisättävä teksti sisältää merkin $ eli esim:
    ./korvaa.sh index.php "if ($HTTP_POST_VARS['id'] != ''"

    Ideoita?
     
  6. Knikke

    Knikke Member

    Joined:
    Oct 16, 2006
    Messages:
    20
    Likes Received:
    0
    Trophy Points:
    11
    Tämä onnistuikin kun muutti "-merkit -> '-merkiksi ja päinvastoin :D
     
  7. Knikke

    Knikke Member

    Joined:
    Oct 16, 2006
    Messages:
    20
    Likes Received:
    0
    Trophy Points:
    11
    Eli eli... komentoon:
    find -maxdepth 2 -name 'index.php' tarttis nyt yhdistää toi korvaa.sh... Ihan putkittamalla se ei onnistu.. (en osaa :D)
    Pystyyköhän tohon korvaa.sh-tidostoon lisään cksumin tai jonkun, että se lisää vaan rivin jos cksum on tietty?
     
  8. Knikke

    Knikke Member

    Joined:
    Oct 16, 2006
    Messages:
    20
    Likes Received:
    0
    Trophy Points:
    11
    Olen saanut muodostettua rivin joka lisää kaikkiin löytämiinsä index.php-tiedstoihin tekstiä.

    [bold]find . -maxdepth 2 -name 'index.php' -size 4k -exec ./korvaa.sh {} "Testi" \;[/bold]

    Toi on jo oikeastaan se mitä hain. Vielä jos ton size:n tilalla ois joku cksum:n tai sum:n tarkistus...Vaikka kyllä toiki varmaan on sopiva tarkoitukseeni. Kiitoksia avusta!
     
  9. Knikke

    Knikke Member

    Joined:
    Oct 16, 2006
    Messages:
    20
    Likes Received:
    0
    Trophy Points:
    11
    Osaisko joku yhistää chksumin, sumin tai md5sumin joko tohon kyselyyn tai sit tohon korvaa.sh-tiedostoon?
     

Share This Page