This pages shows the equivalent of PowerShell for common unix commands related to text processing, such as {grep, head, find, sort, uniq, wc, …}. The version of unix tool used here are Bash and GNU. (that's most linuxes, but not BSDs, Solaris, Mac OS X.)
For simpler things such as {cd, mkdir, ls, …}, see PowerShell as Bash.
| Purpose | Bash + GNU utils | PowerShell |
|---|---|---|
| create new file | touch ff | ni ff -type fileni = New-Item |
| show file content | cat ff | cat ffcat = Get-Content = gc |
| ◇ | cat f1 f2 > new.txt | cat f1, f2 > new.txt |
| show first n lines | head -n 50 ff | cat ff | select -first 50 |
| ◇ | tail | cat file | select -last 50 |
| ◇ | split | ? |
| Purpose | Bash + GNU utils | PowerShell |
|---|---|---|
| list dirs | find . -type d | gci . -Recurse -namegci = Get-ChildItem |
| ◇ | find . -type f | ? |
| ◇ | find . -name "*html" | gci . -Recurse -name -include *html |
| ◇ | find . -size 0 | ls . -recurse | where {$_.length -eq 0} |
| ◇ | find . -type f -size 0 -exec rm {} \; | ? |
| Purpose | Bash + GNU utils | PowerShell |
|---|---|---|
| search text | grep xyz f.txt | select-string f.txt -pattern xyz -CaseSensitive |
| search text | grep xyz *html | select-string *html -pattern xyz -CaseSensitive |
| search text | grep -i | select-string without -CaseSensitive |
| search text | grep --invert-match | select-string with -NotMatch |
| search text | grep --files-with-matches | ◇ |
cat ‹file name› | where { $_ -match "‹regex pattern›"}
cat ‹file name› | %{$_ -replace "‹regex pattern›","‹replace string›"}
| Purpose | Bash + GNU utils | PowerShell |
|---|---|---|
| ◇ | cmp | diffdiff = compare = Compare-Object |
| compare file difference | diff f1 f2 | diff (cat f1) (cat f2) |
| ◇ | sed | ? |
| print nth column | awk '{print $12 , $7}' | ? |
| ◇ | sort | sort (Sort-Object) |
| ◇ | uniq | sort -Unique |
| ◇ | wc | Measure-Object(measure = Measure-Object) |
| ◇ | tr | ◇ |
| ◇ | basename | ◇ |
| ◇ | dirname | ◇ |
Note: this page is a mess. It's work in progress. (started when i wished to convert my log processing bash script to PowerShell)
todo, shew PowerShell equivalent of this:
find . -print0 | xargs -0 -l -i echo "{}";
find . -name "*bmp" -print0 | xargs -0 -l -i basename -s ".bmp" "{}" | xargs -0 -l -i convert "{}.bmp" "{}.png".
# creating a new file in current dir touch myfile.txt
# creating a new file in current dir new-item -name myfile.txt -type "file"
# put content in a file echo "some" > myfile.txt echo "some more" >> myfile.txt # append
# put content in a file "some" > myfile.txt "some more" >> myfile.txt # append
Note that, by default, the PowerShell redirect operator ">" creates files with little endian utf-16 encoding, and lines are hard-wrapped at 80 chars, and line ending uses Windows convension of "\r\n" (ascii 13 and 10).
On unixes, the conventional file encoding is utf-8, and lines are not hard-wrapped (sometimes truncated (deleted) silently), and line ending uses "\n" (ascii 10).
To create unix style output, use out-file, like this:
"1'n2'n3" | out-file -Encoding utf8 -width 999000 myfile.txt
However, the line ending used is still "\r\n". To create unix line ending of just "\n", use:
… | Out-String | %{ $_.Replace("`r`n","`n") } | out-file …
However, the end of the file will still contain a "\r".
Unix “cat” can be used to read a file, or join several files. PowerShell equivalent is “get-content” with alias “cat” too.
# display a file content. (cat is alias of get-content)
cat myfile.txt
Note that by default, PowerShell assumes ascii. You can set your $OutputEncoding like this:
# set $OutputEncoding to utf-8 $OutputEncoding = New-Object -typename System.Text.UTF8Encoding
Thanks to Shivashis Saha for addition on “cat”. He also sends the following:
For example, if you want to split a line based on ":", you can use the following line:
(given $str is a line with different fields separated by ":") $temp=@($str -split ":");
Super thanks to Jeffrey Snover of Microsoft for helping on about 10 of the items. (Jeffrey's the inventor of PowerShell)
See also a short intro to PowerShell for unixers: