誰でもわかる!powershell入門学習サイト 文字列整形編
Sal
powershell powershellの文字列整形は非常に強力です。powershellクックブックで紹介されていたレシピの備忘録を公開します。

誰でもわかる!powershell入門学習サイト 文字列整形編

  1. 複数行の文字列
  2. フォーマット文字列について
  3. #別の例
  4. 文字列パターンと一致するかどうかがみたい
  5. #ワイルドカードを使う時
  6. #正規表現で解決する
  7. ある文字列が含まれるかどうかがみたい
  8. 何文字目に含まれるかが見たい
  9. 文字列を置換したい
  10. 大文字小文字変換
  11. #大文字化
  12. #小文字化
  13. 具体例1
## 複数行の文字列
「@"」で囲むことで文字列を複数行にかける。

$myString = @"
This is the first line
of a very long string. A "here string"
lets you to create blocks of text
that span several lines.
"@

この手法はただの文字列にだけでなく、コードのコメントアウトにも使える。

//This is a regular comment
$null = @"
function MyTest
{
    "This should not be considered a function"
}
$myVariable = 10;
"@
//これ以降のコードは通常のコードです。
...


## フォーマット文字列について
サンプルコード

$formatString = "{0,8:D4}  {1:C}`n"
$formatString -f 50,2.5677
$formatString -f 3,9

出力結果

0050  $2.57
0003  $9.00

解説 上で定義したformatStringは{}ないに好きな文字を好きな形式で代入できる。 $formatString = "{0,8:D4} {1:C}`n" {0,8:D4} は 0番目の代入を、8文字の長さの右揃えで、4桁のD(整数を表す)で表示される。 $formatString -f 50,2.5677 であれば、-fの後の50に値する。 そしてその出力は 0050 $2.57 となる。 二つ目の {1:C}は 1番目の代入を、C(Coin、通貨)形式で表す。
## #別の例

$number1 = 10
$number2 = 32
"{0} divided by {1} is {2}" -f $number2, $number1, ($number2 / $number1)

実行結果

32 divided by 10 is 3.2

## 文字列パターンと一致するかどうかがみたい
## #ワイルドカードを使う時

"Hello World" –like "*llo W*"

ワイルドカードは -like 演算子で評価できる。 上の実行結果はTrueになる
## #正規表現で解決する

"Hello World" –match '.*l[l-z]o W.*$'

正規表現は -matchで評価できる。
## ある文字列が含まれるかどうかがみたい

"Hello World".Contains("World")

Contains関数は文字列のメソッドとしてすでに定義されている。 こちらの実行結果もTrue
## 何文字目に含まれるかが見たい

"Hello World".IndexOf("World")

IndexOfは文字列が含まれる最初の場所0スタートで教えてくれる。 今回であれば、 0123456 Hello W であるので、6が返される。
## 文字列を置換したい
Replaceを使おう

"Hello World".Replace("World", "PowerShell")

実行結果

Hello PowerShell

## 大文字小文字変換
.ToUpper(),.ToLower()メソッドを使おう
## #大文字化
サンプル

"Hello World".ToUpper()

実行結果

HELLO WORLD

## #小文字化
サンプル

"Hello World".ToLower()


hello world

#大きな文字列を生成する。
## 具体例1

Get-ChildItem C:\ *.txt -Recurse | Out-File c:\temp\AllTextFiles.txt

上のコマンドの方が以下のコマンドより早い


$files = Get-ChildItem C:\ *.txt –Recurse
$files | Out-File c:\temp\AllTextFiles.txt

なぜ早いのか

遅い方のコマンドでは$filesに一度全ての実行結果を格納している

その結果、filesにメモリーの容量が奪われ、CPUに負荷を与える(CPUが一度に覚えておかなければいけないことが多くなる)

それに対し、パイプラインはいわゆる「流れ」を形成する。

Get-ChildItemで取得したデータは止まらずにすぐにOutFileで出力されるため、CPUが覚えておかなければならない量が減る

title:誰でもわかる!powershell入門学習サイト 文字列整形編 description:powershellの文字列整形は非常に強力です。powershellクックブックで紹介されていたレシピの備忘録を公開します。 img:https://cdn.slidesharecdn.com/ss_thumbnails/windows-powershell-cookbook-the-complete-guide-to-scripting-microsofts-command-shell-190312151315-thumbnail-4.jpg?cb=1552403608 category_script:page_name.startswith("1")