3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

初めてPowerShellで文字操作をやってみた

Last updated at Posted at 2021-05-28

PowerShellの勉強の続きです。今回は文字操作を勉強してみました。いつものとおり、忘れないようにメモを残します。

#文字列の分割

文字列を区切り記号,で分割します。

一般的な記入法
'Jan,Feb Mar,Apr'.split(',')
Jan
Feb Mar
Apr

複数の区切り記号をカンマ,と空白 として分割します。

複数の区切り記号を使う場合
'Jan,Feb Mar,Apr'.split(', ')
Jan
Feb
Mar
Apr

分割数を指定します。

分割数3を指定した場合
'Jan,Feb Mar,Apr'.split(', ',3)
Jan
Feb
Mar,Apr

正規表現を使う場合は-splitを使います。

正規表現を使う場合
'Jan,Feb Mar,Apr' -split '[,\s]',3
Jan
Feb
Mar,Apr

区切り記号を2文字以上にする場合も正規表現を使います。

改行コードで分割する場合
"abc`r`ndef" -split "`r`n"         #PowerShellではエスケープに"\"ではなく"`"を使います。
abc
def

#文字の前後の空白の削除

Trimを使い、文字の前後の空白を取り除くことができます。

'  Hello  ,  World !  '.Trim()
Hello  ,  World !

配列では全要素に対し空白の削除が行われる。

'  Hello  ,  World !  '.split(',').Trim()
Hello
World !

#全角・半角変換

文字を半角に変換するには[VbStrConv]::Narrowを、全角に変換するには[VbStrConv]::Wideを使います。

using namespace Microsoft.VisualBasic
Add-Type -AssemblyName 'Microsoft.VisualBasic'
[Strings]::StrConv('PowerShell',[VbStrConv]::Narrow)
[Strings]::StrConv('Windows',[VbStrConv]::Wide)
PowerShell
Windows

#置き換え

文字bcBCに置き換えます。

一般的な記入法
'abcdefgabcdefg'.Replace('bc','BC')
aBCdefgaBCdefg

正規表現を使う場合は-replaceを使います。

正規表現を使う場合
"abc`r`ndef" -replace "`r`n",","
abc,def

複数の条件を入れる場合も正規表現を使います。

複数の条件を使う場合
'abc,def' -replace 'abc|def','xyz'
xyz,xyz

#n番目の文字の場所を調べる

(n番目の区切り文字の場所)+1を調べます。

$original='id,name,age,sex'
$c=0
$number=2
for($i=0;$i -lt $number;$i++){ $c=$original.IndexOf($target,$c)+1 }
$cの値(結果)
8

後ろから数えるには、LastIndexOfを使います。(後ろから数えてn番目の区切り文字の場所)-1を調べます。

$original='id,name,age,sex'
$c=0
$number=1
$c=$original.Length
for($i=0;$i -lt $number;$i++){ $c=$original.LastIndexOf($target,$c)-1 }
$cの値(結果)
10

#文字を数える

(IndexOfを使う方法もあるのですが)ネットでは「元の文字数から対象の文字を消した文字数を引く」方法がよく書かれていました。

変数内にある対象の文字数を調べる
$original='id,name,age,sex'
$target=','
($original.Length-($original -replace $target,'').Length)/$target.Length
3

#特定の文字が入っている行を取り出す

ログファイル*.logからerrorと書かれた行を取り出します。デフォルトでは大文字小文字を区別しないようです。

select-string *.log -Pattern 'error'
test1.log:3:system error 88
test2.log:6:service Error 99

#おわりに

PowerShellはWindowsに必ず入っているので、慣れてくるといろ色々なことができそうです。次回はcsvファイル関連のプログラムを作ってみたいと思います。

3
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?