PowerShell:
Redigera filer på plats med kommandoradsenradare
Hur gör man:
Ersätta text i en enskild fil
Låt oss börja med en enkel uppgift: du vill ersätta alla förekomster av “oldtext” med “newtext” i en fil som heter example.txt. Så här skulle du göra det:
(Get-Content example.txt) -replace 'oldtext', 'newtext' | Set-Content example.txt
Den här enradskommandot läser innehållet, utför ersättningen och skriver tillbaka innehållet till originalfilen.
Redigera flera filer
Vad om du behöver tillämpa samma ändring på flera filer? Här är en metod som använder en loop:
Get-ChildItem *.txt | ForEach-Object {
(Get-Content $_) -replace 'oldtext', 'newtext' | Set-Content $_
}
Det här kodstycket hittar alla .txt
-filer i den aktuella katalogen och ersätter “oldtext” med “newtext” i var och en.
Lägga till innehåll i början eller slutet av filer
Att lägga till eller förbereda innehåll kan också strömlinjeformas:
# Förbereda
"New first line`n" + (Get-Content example.txt) | Set-Content example.txt
# Lägga till i slutet
(Get-Content example.txt) + "`nNew last line" | Set-Content example.txt
Här konkatenerar vi helt enkelt det nya innehållet före eller efter det befintliga innehållet och sparar det tillbaka.
Fördjupning
Historiskt sett är direktredigering oftare förknippad med Unix-verktyg som sed
och awk
. PowerShell, som är en senare aktör, inkluderar inte en dedikerad funktion för direktredigering direkt ur lådan. Detta beror delvis på dess designfilosofi som betonar vikten av objekt över textströmmar, till skillnad från Unix-verktyg som behandlar de flesta inmatningar som text.
Alternativ till PowerShell för denna uppgift inkluderar att använda traditionella Unix-verktyg tillgängliga på Windows genom Cygwin eller Windows Subsystem för Linux (WSL). Dessa verktyg erbjuder ofta en mer koncis syntax för direktredigering på grund av deras textcentrerade design.
När det gäller implementering är det viktigt att notera att PowerShell-ansatsen innebär att läsa hela filen till minnet, göra ändringar och sedan skriva tillbaka den. Även om detta fungerar bra för måttligt stora filer, kan det bli ineffektivt för mycket stora filer. I sådana fall kan man överväga att direkt använda .NET
-metoder eller att vända sig till alternativa verktyg utformade för att strömma stora mängder data.
Trots dessa överväganden är PowerShell:s flexibilitet och omfattande funktionssätt ett ovärderligt verktyg för att manipulera filer direkt från kommandoraden, speciellt för de som redan är djupt involverade i Windows-ekosystemet eller hanterar plattformsoberoende miljöer.