Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Asentaminen ja käyttöönotto => Aiheen aloitti: peg - 28.08.06 - klo:11.32

Otsikko: tiedostoista sanan poistaminen ?
Kirjoitti: peg - 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.??
Otsikko: Re: tiedostoista sanan poistaminen ?
Kirjoitti: _Pete_ - 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 ...
Otsikko: Re: tiedostoista sanan poistaminen ?
Kirjoitti: peg - 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.
Otsikko: Re: tiedostoista sanan poistaminen ?
Kirjoitti: jurkki - 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
Otsikko: Re: tiedostoista sanan poistaminen ?
Kirjoitti: _Pete_ - 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.



Otsikko: Re: tiedostoista sanan poistaminen ?
Kirjoitti: tn - 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
Otsikko: Re: tiedostoista sanan poistaminen ?
Kirjoitti: mgronber - 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 :)
Otsikko: Re: tiedostoista sanan poistaminen ?
Kirjoitti: peg - 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.
Otsikko: Re: tiedostoista sanan poistaminen ?
Kirjoitti: _Pete_ - 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