Tiedostojen muokkaaminen paikan päällä komentorivin yhden rivin komennoilla

PowerShell:
Tiedostojen muokkaaminen paikan päällä komentorivin yhden rivin komennoilla

Kuinka tehdä:

Tekstin korvaaminen yhdessä tiedostossa

Aloitetaan yksinkertaisella tehtävällä: haluat korvata kaikki “oldtext”-esiintymät “newtext”-tekstillä tiedostossa nimeltä example.txt. Näin teet sen:

(Get-Content example.txt) -replace 'oldtext', 'newtext' | Set-Content example.txt

Tämä yhden rivin komento lukee sisällön, suorittaa korvauksen ja kirjoittaa sisällön takaisin alkuperäiseen tiedostoon.

Useiden tiedostojen muokkaaminen

Entä jos tarvitset tehdä saman muutoksen useissa tiedostoissa? Tässä yksi lähestymistapa käyttäen silmukkaa:

Get-ChildItem *.txt | ForEach-Object {
  (Get-Content $_) -replace 'oldtext', 'newtext' | Set-Content $_
}

Tämä pätkä etsii kaikki .txt-tiedostot nykyisestä hakemistosta ja korvaa “oldtext”-tekstin “newtext”-tekstillä jokaisessa.

Sisällön lisääminen tiedostojen alkuun tai loppuun

Sisällön liittäminen alkuun tai loppuun voidaan myös virtaviivaistaa:

# Liittäminen alkuun
"Uusi ensimmäinen rivi`n" + (Get-Content example.txt) | Set-Content example.txt

# Liittäminen loppuun
(Get-Content example.txt) + "`nUusi viimeinen rivi" | Set-Content example.txt

Tässä yksinkertaisesti yhdistämme uuden sisällön ennen tai jälkeen nykyisen sisällön ja tallennamme sen takaisin.

Syväsukellus

Historiallisesti paikan päällä tehtävät muokkaukset ovat enemmän yhdistetty Unix-työkaluihin kuten sed ja awk. PowerShell, ollessaan suhteellisen uusi tulokas, ei sisällä valmiina erillistä paikan päällä muokkaamisen ominaisuutta. Tämä johtuu osittain sen suunnittelufilosofiasta, joka korostaa objektien tärkeyttä tekstivirtojen sijaan, toisin kuin Unix-työkalut, jotka käsittelevät useimpia syötteitä tekstiksi.

Vaihtoehtoja PowerShellille tähän tehtävään sisältävät perinteiset Unix-työkalut, jotka ovat saatavilla Windowsille Cygwinin tai Windowsin alijärjestelmän Linuxille (WSL) kautta. Nämä työkalut tarjoavat usein tiiviimmän syntaksin paikan päällä tehtävään muokkaukseen niiden tekstikeskeisen suunnittelun ansiosta.

Toteutuksen kannalta on tärkeää huomata, että PowerShellin lähestymistapa sisältää koko tiedoston lukemisen muistiin, muutosten tekemisen ja sitten sen kirjoittamisen takaisin. Vaikka tämä toimii hyvin kohtuullisen kokoisille tiedostoille, se voi muuttua tehottomaksi hyvin suurille tiedostoille. Tällaisissa tapauksissa saatetaan harkita .NET-menetelmien suoraa käyttöä tai vaihtoehtoisten työkalujen käyttöä, jotka on suunniteltu suurten datamäärien suoratoistoon.

Huolimatta näistä seikoista, PowerShellin joustavuus ja laaja ominaisuusvalikoima tekevät siitä arvokkaan työkalun tiedostojen suoraan käsittelyyn komentoriviltä, erityisesti niille, jotka ovat jo syvällä Windows-ekosysteemissä tai hallinnoivat alustojen välisiä ympäristöjä.