Kirjoittaja Aihe: tiedostoista sanan poistaminen ?  (Luettu 3165 kertaa)

peg

  • Käyttäjä
  • Viestejä: 88
    • Profiili
tiedostoista sanan poistaminen ?
« : 28.08.06 - klo:11.32 »
Pitäisi saada poistettua kansiosta suku ja sen kaikista alakansioista olevista tiedostoista rivit jotka sisältävät sanan
gallery.html . Tiedostoja on yli 500 kpl. hyvistä ohjeista kiitollinen, käsin en alaa aukomaan joka tiedostoa.??
dapper / pc / gnome / wlan ja hyvät hermot

_Pete_

  • Käyttäjä
  • Viestejä: 1845
  • Fufufuuffuuu
    • Profiili
Re: tiedostoista sanan poistaminen ?
« Vastaus #1 : 28.08.06 - klo:11.42 »
Pitäisi saada poistettua kansiosta suku ja sen kaikista alakansioista olevista tiedostoista rivit jotka sisältävät sanan
gallery.html . Tiedostoja on yli 500 kpl. hyvistä ohjeista kiitollinen, käsin en alaa aukomaan joka tiedostoa.??

Koodia: [Valitse]
for i in `find suku/ -type f` ;
do echo $i;
grep -v $i gallery.html >/tmp/tmp.filu
cp /tmp.tmp.filu $i
done

Menisköhän noin, kannattaa kokeilla ensin jossain muussa kuin varsinaisessa kohdehakemistossa, esim tekemällä
suku/ kansiosta kopion muualle :)

Niin ja tuo siis suoritetaan terminaalissa ...

peg

  • Käyttäjä
  • Viestejä: 88
    • Profiili
Re: tiedostoista sanan poistaminen ?
« Vastaus #2 : 28.08.06 - klo:12.29 »
selitin heikosti, gallery.html ei ole tiedosto vaan teksti monessa tiedostossa (linkki galleriaan). ja nämä rivit joilla
teksti on pitäisi poistaa.
dapper / pc / gnome / wlan ja hyvät hermot

jurkki

  • Käyttäjä
  • Viestejä: 48
    • Profiili
Re: tiedostoista sanan poistaminen ?
« Vastaus #3 : 28.08.06 - klo:13.02 »
sed:llä onnistunee.
syntaksi on muotoa
Koodia: [Valitse]
sed 's/vanha/uusi/'
jos haluat poistaa sanan gallery.html niin silloin
Koodia: [Valitse]
sed 's/gallery.hmtl//'

ehkäpä jotenkin tähän malliin (kokeile ensin jossain muualla, ettei kaikki mene, tuo sed ei ole iha niitä vahvimpia puoliani ja päästä nyt heittelen):

Koodia: [Valitse]
cd suku
find ./ -type f -exec sed -i 's/gallery.html//' {} \;

find ./ -type f etsii kaikki tiedostot rekursiivisesti nykyisestä kansiosta
-exec <komento> {} \; - suorittaa <komennon> ja syötteenä jokainen tiedosto jonka find löysi
tuo sed:n -i -vipu on 'in place' eli korvaa tiedostosta

toivottavasti toimii  ???
joku fiksumpi saa korjata, jos on korjattavaa

_Pete_

  • Käyttäjä
  • Viestejä: 1845
  • Fufufuuffuuu
    • Profiili
Re: tiedostoista sanan poistaminen ?
« Vastaus #4 : 28.08.06 - klo:13.11 »
selitin heikosti, gallery.html ei ole tiedosto vaan teksti monessa tiedostossa (linkki galleriaan). ja nämä rivit joilla
teksti on pitäisi poistaa.


Ja juurikin tuon pitäisi esittämäni komennot tehdä.

grep -v $i gallery.html >/tmp/tmp.filu

Tämä komento tulostaa käsiteltävästä tiedostosta kaikki muut rivit paitsi ne jossa esinintyy gallery.html,
tulostus ohjataat tmp.filu:n joka sen jälkeen kopioidaan käsiteltävän tiedoston päälle.




tn

  • Käyttäjä
  • Viestejä: 472
    • Profiili
Re: tiedostoista sanan poistaminen ?
« Vastaus #5 : 28.08.06 - klo:14.32 »
grep -v $i gallery.html >/tmp/tmp.filu
Eikö grep tulkkaa tuota pistettä niin kuin säännöllisissä lausekkeissa kuuluu? Vaikka tuskimpa asialla on tässä tilanteessa sen suurempaa merkitystä. Itse laittaisin kuitenkin näin:
grep -v $i gallery\.html >/tmp/tmp.filu
tai näin, jos se ei hyväksy edellistä
grep -v $i 'gallery\.html' >/tmp/tmp.filu

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Re: tiedostoista sanan poistaminen ?
« Vastaus #6 : 28.08.06 - klo:14.58 »
Teidän greppaukset toimisivat huomattavasti paremmin jos antaisitte parametrit oikeassa järjestyksessä.

Koodia: [Valitse]
$ man grep
GREP(1)                                                                GREP(1)

NAME
       grep, egrep, fgrep, rgrep - print lines matching a pattern

SYNOPSIS
       grep [options] PATTERN [FILE...]
       grep [options] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION
[...]

Oikea muoto komennolle olisi siis
Koodia: [Valitse]
grep -v gallery\.html "$i" >/tmp/tmp.filu

Tämän lisäksi tuo väliaikaistiedosto olisi syytä kopioimisen (cp) sijasta siirtää (mv). Nyt järjestelmään jää yksi ylimääräinen tmp.filu-tiedosto.

Koko homma onnistuu kuitenkin siististi sed:n avulla ja alkuperäisen skriptin sijasta saman asian voi tehdä yhdellä rivillä.
Koodia: [Valitse]
$ find suku/ -type f -print0 | xargs -0 -L1 sed -i /gallery\.html/d

Suosittelen kuitenkin varmuuskopion ottamista ennen tuon ajamista. Silloin harmittaa huomattavasti vähemmän jos jälkikäteen paljastuu että jollakin gallery.html-tekstin sisältäneellä rivillä oli jotakin muuta tärkeää mitä ei olisi saanut tuhota :)
« Viimeksi muokattu: 28.08.06 - klo:15.07 kirjoittanut mgronber »

peg

  • Käyttäjä
  • Viestejä: 88
    • Profiili
Re: tiedostoista sanan poistaminen ?
« Vastaus #7 : 29.08.06 - klo:12.53 »
Kiitokset teille, olipa tosi kätevä. Mistä näitä voi opiskella lisää. linkkejä kiitos. Linux.fi komentokehoite vinkit luettu.
dapper / pc / gnome / wlan ja hyvät hermot

_Pete_

  • Käyttäjä
  • Viestejä: 1845
  • Fufufuuffuuu
    • Profiili
Re: tiedostoista sanan poistaminen ?
« Vastaus #8 : 29.08.06 - klo:13.36 »
Kiitokset teille, olipa tosi kätevä. Mistä näitä voi opiskella lisää. linkkejä kiitos. Linux.fi komentokehoite vinkit luettu.

Tästä on hyvä aloittaa:

http://forum.ubuntu-fi.org/index.php?topic=303.0