Kirjoittaja Aihe: Merkkien korvaus tiedostojen sisällä.  (Luettu 5013 kertaa)

0 jäsentä ja 1 Vieras katselee tätä aihetta.

Poissa Owdy

  • Huoltomies
  • Jäsen
  • Viestejä: 3260
Merkkien korvaus tiedostojen sisällä.
« : 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?

Poissa SuperOscar

  • Käännösryhmä
  • *
  • Viestejä: 945
  • Sukupuoli: Mies
  • Tänään täällä, huomenna poissa
    • Legisign.org
Vs: Merkkien korvaus tiedostojen sisällä.
« Vastaus #1 : 05.10.2009 - klo:17:55 »
tr lienee järkevin vaihtoehto, jos kyse on todella X -> Y -tyyppisestä merkkien ”käännöksestä”.
pöytäkone 1, NUC: openSUSE Leap 15.6; kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

guest66

  • Vieras
Vs: Merkkien korvaus tiedostojen sisällä.
« Vastaus #2 : 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 ;)

Poissa Owdy

  • Huoltomies
  • Jäsen
  • Viestejä: 3260
Vs: Merkkien korvaus tiedostojen sisällä.
« Vastaus #3 : 05.10.2009 - klo:19:08 »
Täytyy testata, kiitos!

Poissa SuperOscar

  • Käännösryhmä
  • *
  • Viestejä: 945
  • Sukupuoli: Mies
  • Tänään täällä, huomenna poissa
    • Legisign.org
Vs: Merkkien korvaus tiedostojen sisällä.
« Vastaus #4 : 05.10.2009 - klo:19:31 »
Mutta juuri tuollaisessa muunnoksessa tr on helpompi:

Koodia: [Valitse]
tr x y < tiedosto > uusi_tiedosto
pöytäkone 1, NUC: openSUSE Leap 15.6; kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

guest66

  • Vieras
Vs: Merkkien korvaus tiedostojen sisällä.
« Vastaus #5 : 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

Poissa SuperOscar

  • Käännösryhmä
  • *
  • Viestejä: 945
  • Sukupuoli: Mies
  • Tänään täällä, huomenna poissa
    • Legisign.org
Vs: Merkkien korvaus tiedostojen sisällä.
« Vastaus #6 : 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.
pöytäkone 1, NUC: openSUSE Leap 15.6; kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11