Vytvorte v domovskom adresári súbor ahoj.txt
s obsahom AHOJ
echo "Ahoj" > ahoj.txt
Toto je klasická finta známa ešte z čias MS-DOSu (a fungujúca aj na Linuxe).
Alternatívne: pošlime do rúry reťazec a cez Set-Content
ho uložme do súboru.
"AHOJ" | Set-Content ahoj.txt
Alternatívne:
"AHOJ" | sc ahoj.txt
Overte existenciu súboru ahoj.txt
cat ahoj.txt
Toto je klasická linuxovina. V skutočnosti je cat
alias pre Get-Content
(gc
):
Get-Content ahoj.txt
Vytvorte v domovskom adresári zoznam desiatich súborov tyzden1.txt … tyzden10.txt
1..10 | % {"" | set-content tyzden$_.txt}
Zistite adresár, v ktorom sa nachádzajú položky Plochy.
Informáciu možno získať z registrov z položky HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
, v kľúči Desktop
.
Overte, že sa naozaj v registroch nachádza. Položka je typu expandovateľný reťazec a premenná %USERPROFILE%
sa automaticky expanduje na správnu hodnotu podľa aktuálne prihláseného používateľa.
(gi 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders').GetValue("Desktop")
Vytvorte na ploche súbor poznamky.txt
$DesktopDir = (gi 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders').GetValue("Desktop")
"" | sc $DesktopDir\poznamky.txt
Stiahnite z PowerShellu súbor http://ics.upjs.sk/~novotnyr/home/skola/systemove_programovanie/mena.txt
(New-Object System.Net.WebClient).DownloadString("http://ics.upjs.sk/~novotnyr/home/skola/systemove_programovanie/mena.txt") | Set-Content mena.txt
V textovom editore vytvorte súbor mena.txt s nasledovným obsahom:
Jozef Košický,študent,Hlavná 25,Košice
Milan Košický,študent,Leninova 66,Košice
Zuzana Mikulášska,zamestnankyňa,Poľná 25, Liptovský Mikuláš
Júlia Spišskohôrna,študentka,Alana Turinga 25, Spišská Hôrna
Jeremiáš Prešovský,školník,Industriálna 15, Prešov
Vypíšte obsah súboru mena.txt
Get-Content mena.txt
Alternatívne:
gc mena.txt
Vypíšte len riadky, ktoré obsahujú študentov
Get-Content mena.txt | where {$_ -like "*študent*"}
Alternatívne:
gc mena.txt | ? {$_ -like "*študent*"}
Alternatívne:
gc mena.txt | ? {$_ -match "študent"}
Súbor je reprezentovaný ako zoznam reťazcových riadkov, overte to:
Get-Content mena.txt | Get-Member
Vypíšte len riadky, ktoré obsahujú študentov začínajúcich sa na „J“
Get-Content mena.txt | where {$_ -like "J*"}
Vypíšte len riadky, ktoré sa začínajú sa na „J“ a reprezentujú len zamestnancov
Get-Content mena.txt | where {($_ -like "J*") -and ($_ -notlike "*zamestnanec*")}
Vypíšte jednotlivé slová z gramatickej vety zadanej na vstupe
"Byť, či nebyť, to je otázka".split()
Metóda split()
rozdelí text podľa oddeľovača, výsledkom je zoznam s jednotlivými oddelenými prvkami.
Alternatívne sa dá použiť operátor –split
"Ahoj svet" -split " "
Z textu „Ahoj svet“ vypíšte len prvé slovo
"Byť, či nebyť, to je otázka".split()[0]
K zoznamu môžeme pristupovať pomocou poľovej notácie.
Alternatívne:
("Byť, či nebyť, to je otázka" -split " ")[0]
Alternatívne:
"Byť, či nebyť, to je otázka" -split " " | select -first 1
Vypíšte len mená zo súboru mena.txt
get-content mena.txt | % {$_.split(",")[0]}
Metóda split()
má parameter, kde vieme špecifikovať oddeľovač. (Implicitný oddeľovač je medzera).
Vypíšte mená, ktoré sa končia na „A“
get-content mena.txt | % {$_.split(",")[0]} | ? {$_ -like "*a"}
Alternatívne pomocou regulárnych výrazov:
get-content mena.txt | ? {$_ -match ".+a,"}
Vypíšte ľudí, ktorých priezvisko sa začína na „K“
get-content mena.txt | ? {$_ -match "^(.+) K"}
Vypíšte iniciály mien
get-content mena.txt | ? {$_ -match "^(.).+? (.).+"} | % {$matches[1] + ". " + $matches[2] + "."}
Nahraďte v súbore mena.txt
výskyt „študent“ výskytom „poslucháč“
Prvý chybný nástrel:
gc mena.txt | % {$_ -replace "študent", "poslucháč"} | sc mena.txt
Dostaneme hlášku The process cannot access the file because it is being used by another process
. Namiesto toho uložme výstup do separátneho súboru, originálny súbor zmažme a nový výstup premenujme (toto vyžaduje trojriadkový skript).
Zistite frekvencie jednotlivých slov v súbore
gc babel.txt | % {
$_.split() | % {
$_.toLower().Trim() -replace "[^a-z]", "" | ? {$_.Length -ge 0 }
}
} | Group-Object | Sort Count
- Vyjdime z cmdletu
Get-Content
, ktorý pošle do rúry jednotlivé riadky súboru. - Každý riadok rozdelíme na slová cez
Split
: vzniknú tým jednotlivé slová, ktoré preiterujeme v podrúre. - Každé slovo zhodíme na malé písmená, odsekneme začiatočné a koncové medzery a každé nepísmeno nahradíme prázdnym znakom. Zároveň do rúry pošleme len slová, ktorá po upratovaní majú stále nenulovú dĺžku.
- Všetky slová zgrupneme cez
Group-Object
, čím získame frekvencie. - Tie už len potriedime podľa počtu a sme hotoví.