openSUSEa suomeksi

openSUSE => Asennus ja käyttö => Aiheen aloitti: Owdy - 05.10.2009 - klo:16:52

Otsikko: Merkkien korvaus tiedostojen sisällä.
Kirjoitti: Owdy - 05.10.2009 - klo:16:52
Jos en väärin muista, niin komentorivillä pystyi muokkaamaan kerralla kokonaisen kansion tiedostoja, eli muuttamaan esim kaikki X-kirjaimet Y-kirjaimiksi jne?
Otsikko: Vs: Merkkien korvaus tiedostojen sisällä.
Kirjoitti: SuperOscar - 05.10.2009 - klo:17:55
tr lienee järkevin vaihtoehto, jos kyse on todella X -> Y -tyyppisestä merkkien ”käännöksestä”.
Otsikko: Vs: Merkkien korvaus tiedostojen sisällä.
Kirjoitti: guest66 - 05.10.2009 - klo:18:54
En kokeillut tätä mutta periaatteessa pitäisi toimia, eli kokeile johonkin vähemmän tärkeään ensin ;).
Koodia: [Valitse]
sed 's/X/Y/g' * Eli pitäisi muuttaa ajettavassa hakemistossa olevien tiedostojen kaikki X kirjaimet Y kirjaimiksi.
Edit: Sama asia nopeammin
Koodia: [Valitse]
sed '/X s//Y/g' *

EDIT: joo kotona koneen ääressä huomasin että olen unohtanut -i tosta, eli sed -i plaaplaa ;)
Otsikko: Vs: Merkkien korvaus tiedostojen sisällä.
Kirjoitti: Owdy - 05.10.2009 - klo:19:08
Täytyy testata, kiitos!
Otsikko: Vs: Merkkien korvaus tiedostojen sisällä.
Kirjoitti: SuperOscar - 05.10.2009 - klo:19:31
Mutta juuri tuollaisessa muunnoksessa tr on helpompi:

Koodia: [Valitse]
tr x y < tiedosto > uusi_tiedosto
Otsikko: Vs: Merkkien korvaus tiedostojen sisällä.
Kirjoitti: guest66 - 06.10.2009 - klo:18:47
tr on vanhaa koulua, se ei ota tiedostoja argumenteiksi joten sinun täytyy käyttää päätettä uudelleen ohjataksesi tiedoston stdin:n. Tämän takia tarvitset <tiedoston. Se ei myös kirjoita tiedostoihin minkä takia sinun täytyy käyttää tmptiedostoa>. Tr haluaa ajatella että kaikki tiedoston käsittely on päätteen tehtävä.
Sed tekee kaiken tämän sisäisesti, se ei editoi tiedostoa itsessään vaan se luo tilapäisen tiedoston jolla se sitten korvaa alkuperäisen. Mutta kaikki tämä on piilotettu käyttäjältä mikä tekee siitä yleisesti ymmärrettävimmän käyttää.
Koodia: [Valitse]
tiedostoille *; tee 'X' 'Y' <"$tiedosto"> tmptiedosto ; mv tmptiedosto "$tiedosto"; valmis
Otsikko: Vs: Merkkien korvaus tiedostojen sisällä.
Kirjoitti: SuperOscar - 07.10.2009 - klo:16:34
tr on vanhaa koulua, se ei ota tiedostoja argumenteiksi joten sinun täytyy käyttää päätettä uudelleen ohjataksesi tiedoston stdin:n.

”Vanhaa koulua” se on sedkin – ei taida ohjelmien iässä olla suurtakaan eroa :) Jos ultramodernisti eli GUIssa haluaa asiat hoitaa, löytyyhän sitä ainakin kfilereplace-niminen työkalu.

Itse pidän tuota uudelleenohjausjuttua hyvänä ihan siksi, että saa samalla näppärästi tehdyksi varmuuskopion.