Editace textových souborů v Powershell
Cílem třohoto článku je uvést několik příkladů, jak pomocí powershell skriptu provést editace textových souborů na základě jistých pravidel. Poskytuji spíše kuchařku, než podrobný výklad.
Předpoklad: textový soubor:
Potřebujeme upravit chybný čas, ten správný lze vyčíst z názvů obrázků, které jsou ve tvaru ‚IMG_20210930_151417‘, ve kterém je uveden čas pořízení s přesností na sekundy (30.září 2021, 15 hodin, 14 minut 17 sekund). Pro naše účely bude stačit opravit čas s přesností na minuty.
Pro načtení textového souboru použijeme commandlet Get-Content, jehož výsledkem je objekt typu seznam, jehož prvky tvoří řádky textového souboru. V následujícím příkladu se zároveň filtrují prázdné řádky:
Teď, když už máme jednotlové řádky ve formě promměnné, můžeme zahájit úpravy řádků pomocí standardních metod nad textovými proměnnými:
$soubor=Get-Content c:\inetpub\wwwroot\drahy.unas.cz\211112UNas\update.sql foreach ($line in $soubor) {if ($line -gt 0) {($line.Substring(0,$line.IndexOf("cas=")+10)) + ($line.Substring($line.IndexOf("IMG_2021")+8,2)) + "-" + ($line.Substring($line.IndexOf("IMG_2021")+10,2))}}
aneb zkráceně:
$soubor=Get-Content c:\inetpub\wwwroot\drahy.unas.cz\211112UNas\update.sql $soubor|foreach {if ($_ -gt 0) {($_.Substring(0,$_.IndexOf("cas=")+10)) + ($_.Substring($_.IndexOf("IMG_2021")+8,2)) + "-" + ($_.Substring($_.IndexOf("IMG_2021")+10,2))}}
což dá výsledek:
Takže teď už je nasnadě celý skript:
$soubor=Get-Content c:\inetpub\wwwroot\drahy.unas.cz\211112UNas\update.sql $soubor|foreach {if ($_ -gt 0) {($_.Substring(0,$_.IndexOf("cas=")+10)) + ($_.Substring($_.IndexOf("IMG_2021")+8,2)) + "-" + ($_.Substring($_.IndexOf("IMG_2021")+10,2)) + " " ` + ($_.Substring($_.IndexOf("IMG_2021")+13,2)) + ":" + ($_.Substring($_.IndexOf("IMG_2021")+15,2)) + ($_.substring($_.indexOf("cas=")+21,$_.length-$_.indexof("cas=")-21)) ` }}|Out-File -FilePath c:\x\update.sql -Append
Na závěr skriptu je celý výsledek „pajpnut“ (předán) na výstup do souboru.
No a to je výsledek:
Resumé:
V Powershell načteme textový soubor, přičemž jednotlivé řádky představují prvky jednorozměrného pole (seznamu). Tyto prvky pak lze upravovat standardními metodami pro textové proměnné. Zde v příkladu jsou uvedeny pouze metody Substr a IndexOf, samozřejmě lze použít i další.
Zanechat odpověď